plugins: allow to control menu_return value

Origin commit data
------------------
Branch: ni/coolstream
Commit: 8b38584ac1
Author: vanhofen <vanhofen@gmx.de>
Date: 2021-02-28 (Sun, 28 Feb 2021)

Origin message was:
------------------
- plugins: allow to control menu_return value

------------------
No further description and justification available within origin commit message!

------------------
This commit was generated by Migit
This commit is contained in:
vanhofen
2021-02-28 20:56:04 +01:00
parent 9e107b74bf
commit 0202e51c3e
3 changed files with 53 additions and 28 deletions

View File

@@ -193,6 +193,7 @@ bool CPlugins::parseCfg(plugin *plugin_data)
plugin_data->description = "";
plugin_data->shellwindow = false;
plugin_data->hide = false;
plugin_data->menu_return = menu_return::RETURN_REPAINT;
plugin_data->type = CPlugins::P_TYPE_DISABLED;
plugin_data->integration = PLUGIN_INTEGRATION_DISABLED;
plugin_data->hinticon = NEUTRINO_ICON_HINT_PLUGIN;
@@ -260,6 +261,17 @@ bool CPlugins::parseCfg(plugin *plugin_data)
{
plugin_data->hide = atoi(parm);
}
else if (cmd == "menu_return")
{
if (parm == "none")
plugin_data->menu_return = menu_return::RETURN_NONE;
else if (parm == "exit")
plugin_data->menu_return = menu_return::RETURN_EXIT;
else if (parm == "exit_all")
plugin_data->menu_return = menu_return::RETURN_EXIT_ALL;
else // (parm == "repaint")
plugin_data->menu_return = menu_return::RETURN_REPAINT;
}
else if (cmd == "needenigma")
{
reject = atoi(parm);
@@ -284,28 +296,29 @@ bool CPlugins::parseCfg(plugin *plugin_data)
return !reject;
}
void CPlugins::startPlugin_by_name(const std::string & name)
int CPlugins::startPlugin_by_name(const std::string & name)
{
for (int i = 0; i < (int) plugin_list.size(); i++)
{
if (name.compare(g_Plugins->getName(i)) == 0)
{
startPlugin(i);
return;
return startPlugin(i);
}
}
return menu_return::RETURN_REPAINT;
}
void CPlugins::startPlugin(const char * const filename)
int CPlugins::startPlugin(const char * const filename)
{
int pluginnr = find_plugin(filename);
if (pluginnr > -1)
startPlugin(pluginnr);
return startPlugin(pluginnr);
else
printf("[CPlugins] could not find %s\n", filename);
return menu_return::RETURN_REPAINT;
}
void CPlugins::popenScriptPlugin(const char * script)
int CPlugins::popenScriptPlugin(int number, const char * script)
{
pid_t pid = 0;
FILE *f = my_popen(pid, script, "r");
@@ -324,9 +337,11 @@ void CPlugins::popenScriptPlugin(const char * script)
}
else
printf("[CPlugins] can't execute %s\n",script);
return plugin_list[number].menu_return;
}
void CPlugins::startScriptPlugin(int number)
int CPlugins::startScriptPlugin(int number)
{
const char *script = plugin_list[number].pluginfile.c_str();
printf("[CPlugins] executing script %s\n",script);
@@ -334,7 +349,7 @@ void CPlugins::startScriptPlugin(int number)
{
printf("[CPlugins] could not find %s,\nperhaps wrong plugin type in %s\n",
script, plugin_list[number].cfgfile.c_str());
return;
return menu_return::RETURN_REPAINT;
}
// workaround for manually messed up permissions
@@ -347,10 +362,12 @@ void CPlugins::startScriptPlugin(int number)
scriptOutput = "";
}
else
popenScriptPlugin(script);
return popenScriptPlugin(number, script);
return plugin_list[number].menu_return;
}
void CPlugins::startLuaPlugin(int number)
int CPlugins::startLuaPlugin(int number)
{
const char *script = plugin_list[number].pluginfile.c_str();
printf("[CPlugins] executing lua script %s\n",script);
@@ -358,10 +375,11 @@ void CPlugins::startLuaPlugin(int number)
{
printf("[CPlugins] could not find %s,\nperhaps wrong plugin type in %s\n",
script, plugin_list[number].cfgfile.c_str());
return;
return menu_return::RETURN_REPAINT;
}
#ifdef ENABLE_LUA
CLuaInstance *lua = new CLuaInstance();
// FIXME: runScript() should return the exit-code from script
lua->runScript(script);
delete lua;
#endif
@@ -370,9 +388,11 @@ void CPlugins::startLuaPlugin(int number)
#endif
videoDecoder->Pig(-1, -1, -1, -1);
frameBuffer->paintBackground();
return plugin_list[number].menu_return;
}
void CPlugins::startPlugin(int number)
int CPlugins::startPlugin(int number)
{
// always delete old output
delScriptOutput();
@@ -390,22 +410,21 @@ void CPlugins::startPlugin(int number)
bool ispip = strstr(plugin_list[number].pluginfile.c_str(), "pip") != 0;
//printf("exec: %s pip: %d\n", plugin_list[number].pluginfile.c_str(), ispip);
if (ispip && !g_RemoteControl->is_video_started)
return;
return menu_return::RETURN_REPAINT;
if (plugin_list[number].type == CPlugins::P_TYPE_SCRIPT)
{
startScriptPlugin(number);
return;
return startScriptPlugin(number);
}
if (plugin_list[number].type == CPlugins::P_TYPE_LUA)
{
startLuaPlugin(number);
return;
return startLuaPlugin(number);
}
if (!file_exists(plugin_list[number].pluginfile.c_str()))
{
printf("[CPlugins] could not find %s,\nperhaps wrong plugin type in %s\n",
plugin_list[number].pluginfile.c_str(), plugin_list[number].cfgfile.c_str());
return;
return menu_return::RETURN_REPAINT;
}
g_RCInput->clearRCMsg();
@@ -429,6 +448,8 @@ void CPlugins::startPlugin(int number)
frameBuffer->paintBackground();
g_RCInput->restartInput();
g_RCInput->clearRCMsg();
return plugin_list[number].menu_return;
}
bool CPlugins::hasPlugin(CPlugins::p_type_t type)