movieplayer: Use Lua scripts for selecting live stream urls

Origin commit data
------------------
Commit: b4a2856e1c
Author: Michael Liebmann <tuxcode.bbg@gmail.com>
Date: 2016-03-03 (Thu, 03 Mar 2016)
This commit is contained in:
Michael Liebmann
2016-03-03 09:03:46 +01:00
parent f319890c12
commit ed7b2f91e4
15 changed files with 351 additions and 13 deletions

View File

@@ -878,6 +878,10 @@ ledcontroler.off LED1 & LED2 aus
ledcontroler.on.all LED1 & LED2 an
ledcontroler.on.led1 LED1 an
ledcontroler.on.led2 LED2 an
livestream.head Livestreams
livestream.read_data Lese Daten...
livestream.resolution Auflösung
livestream.scriptpath Script Verzeichnis
lua.boolparam_deprecated1 Achtung!
lua.boolparam_deprecated2 Die Verwendung von Zahl oder String
lua.boolparam_deprecated3 für einen Boolean Parameter ist veraltet.\n Bitte nutzen Sie native Bool Werte zB:

View File

@@ -878,6 +878,10 @@ ledcontroler.off Led1 & Led2 off
ledcontroler.on.all Led1 & Led2 on
ledcontroler.on.led1 Led1 on
ledcontroler.on.led2 Led2 on
livestream.head Live streams
livestream.read_data Read data...
livestream.resolution Resolution
livestream.scriptpath Script path
lua.boolparam_deprecated1 Caution!
lua.boolparam_deprecated2 The use of number or string
lua.boolparam_deprecated3 for a Boolean parameter is deprecated.\n Please use native bool values eg.

View File

@@ -32,6 +32,7 @@ AM_CPPFLAGS += \
-I$(top_srcdir)/lib/connection \
-I$(top_srcdir)/lib/xmltree \
-I$(top_srcdir)/lib/libupnpclient \
-I$(top_srcdir)/lib/jsoncpp/include \
@SIGC_CFLAGS@ \
@CURL_CFLAGS@ \
@FREETYPE_CFLAGS@ \

View File

@@ -222,6 +222,13 @@ void CInfoViewerBB::getBBButtonInfo()
icon = NEUTRINO_ICON_BUTTON_RED;
frameBuffer->getIconSize(icon.c_str(), &w, &h);
mode = CNeutrinoApp::getInstance()->getMode();
#if 0
if (mode == NeutrinoMessages::mode_webtv && !CZapit::getInstance()->GetCurrentChannel()->getScriptName().empty()) {
text = g_Locale->getText(LOCALE_LIVESTREAM_RESOLUTION);
active = true;
break;
}
#endif
if (mode == NeutrinoMessages::mode_ts) {
text = CKeybindSetup::getMoviePlayerButtonName(CRCInput::RC_red, active, g_settings.infobar_buttons_usertitle);
if (!text.empty())
@@ -237,6 +244,13 @@ void CInfoViewerBB::getBBButtonInfo()
icon = NEUTRINO_ICON_BUTTON_GREEN;
frameBuffer->getIconSize(icon.c_str(), &w, &h);
mode = CNeutrinoApp::getInstance()->getMode();
#if 0
if (mode == NeutrinoMessages::mode_webtv && !CZapit::getInstance()->GetCurrentChannel()->getScriptName().empty()) {
text = g_Locale->getText(LOCALE_LIVESTREAM_RESOLUTION);
active = true;
break;
}
#endif
if (mode == NeutrinoMessages::mode_ts) {
text = CKeybindSetup::getMoviePlayerButtonName(CRCInput::RC_green, active, g_settings.infobar_buttons_usertitle);
if (!text.empty())
@@ -252,6 +266,13 @@ void CInfoViewerBB::getBBButtonInfo()
icon = NEUTRINO_ICON_BUTTON_YELLOW;
frameBuffer->getIconSize(icon.c_str(), &w, &h);
mode = CNeutrinoApp::getInstance()->getMode();
#if 1
if (mode == NeutrinoMessages::mode_webtv && !CZapit::getInstance()->GetCurrentChannel()->getScriptName().empty()) {
text = g_Locale->getText(LOCALE_LIVESTREAM_RESOLUTION);
active = true;
break;
}
#endif
if (mode == NeutrinoMessages::mode_ts) {
text = CKeybindSetup::getMoviePlayerButtonName(CRCInput::RC_yellow, active, g_settings.infobar_buttons_usertitle);
if (!text.empty())
@@ -267,6 +288,13 @@ void CInfoViewerBB::getBBButtonInfo()
icon = NEUTRINO_ICON_BUTTON_BLUE;
frameBuffer->getIconSize(icon.c_str(), &w, &h);
mode = CNeutrinoApp::getInstance()->getMode();
#if 0
if (mode == NeutrinoMessages::mode_webtv && !CZapit::getInstance()->GetCurrentChannel()->getScriptName().empty()) {
text = g_Locale->getText(LOCALE_LIVESTREAM_RESOLUTION);
active = true;
break;
}
#endif
if (mode == NeutrinoMessages::mode_ts) {
text = CKeybindSetup::getMoviePlayerButtonName(CRCInput::RC_blue, active, g_settings.infobar_buttons_usertitle);
if (!text.empty())

View File

@@ -44,6 +44,7 @@
#include <gui/plugins.h>
#include <gui/videosettings.h>
#include <gui/streaminfo2.h>
#include <gui/lua/luainstance.h>
#include <gui/lua/lua_video.h>
#include <gui/screensaver.h>
#include <driver/screenshot.h>
@@ -61,6 +62,7 @@
#include <stdlib.h>
#include <sys/timeb.h>
#include <sys/mount.h>
#include <json/json.h>
#include <video.h>
#include <libtuxtxt/teletext.h>
@@ -70,6 +72,7 @@
#include <fstream>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iconv.h>
extern cVideo * videoDecoder;
@@ -199,6 +202,7 @@ void CMoviePlayerGui::Init(void)
blockedFromPlugin = false;
m_screensaver = false;
m_idletime = time(NULL);
liveStreamList.clear();
}
void CMoviePlayerGui::cutNeutrino()
@@ -683,7 +687,131 @@ void* CMoviePlayerGui::bgPlayThread(void *arg)
pthread_exit(NULL);
}
bool CMoviePlayerGui::PlayBackgroundStart(const std::string &file, const std::string &name, t_channel_id chan)
bool CMoviePlayerGui::sortStreamList(livestream_info_t info1, livestream_info_t info2)
{
return (info1.res1 < info2.res1);
}
bool CMoviePlayerGui::luaGetUrl(const std::string &script, const std::string &file, std::vector<livestream_info_t> &streamList)
{
CHintBox* box = new CHintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_LIVESTREAM_READ_DATA));
box->paint();
std::string result_code = "";
std::string result_string = "";
std::vector<std::string> args;
args.push_back(file);
CLuaInstance *lua = new CLuaInstance();
lua->runScript(script.c_str(), &args, &result_code, &result_string);
delete lua;
if ((result_code != "0") || result_string.empty()) {
if (box != NULL) {
box->hide();
delete box;
}
return false;
}
Json::Value root;
Json::Value data;
Json::Reader reader;
bool parsedSuccess = reader.parse(result_string, root, false);
if (!parsedSuccess) {
printf("Failed to parse JSON\n");
printf("%s\n", reader.getFormattedErrorMessages().c_str());
if (box != NULL) {
box->hide();
delete box;
}
return false;
}
livestream_info_t info;
for(size_t i = 0; i < root.size(); ++i) {
data = root[i]["url"]; info.url = data.asString();
data = root[i]["name"]; info.name = data.asString();
data = root[i]["band"]; info.bandwidth = atoi(data.asString().c_str());
data = root[i]["res1"]; std::string tmp = data.asString(); info.res1 = atoi(tmp.c_str());
data = root[i]["res2"]; info.resolution = tmp + "x" + data.asString();
streamList.push_back(info);
}
/* sort streamlist */
std::sort(streamList.begin(), streamList.end(), sortStreamList);
/* remove duplicate resolutions */
livestream_info_t *_info;
int res_old = 0;
for (size_t i = 0; i < streamList.size(); ++i) {
_info = &(streamList[i]);
if (res_old == _info->res1)
streamList.erase(streamList.begin()+i);
res_old = _info->res1;
}
if (box != NULL) {
box->hide();
delete box;
}
return true;
}
bool CMoviePlayerGui::selectLivestream(std::vector<livestream_info_t> &streamList, int res, livestream_info_t* info)
{
livestream_info_t* _info;
int _res = res;
#if 0
printf("\n");
for (size_t i = 0; i < streamList.size(); ++i) {
_info = &(streamList[i]);
printf("%d - _info->res1: %4d, _info->res: %9s, _info->bandwidth: %d\n", i, _info->res1, (_info->resolution).c_str(), _info->bandwidth);
}
printf("\n");
#endif
bool resIO = false;
while (1) {
size_t i;
for (i = 0; i < streamList.size(); ++i) {
_info = &(streamList[i]);
if (_info->res1 == _res) {
info->url = _info->url;
info->name = _info->name;
info->resolution = _info->resolution;
info->res1 = _info->res1;
info->bandwidth = _info->bandwidth;
return true;
}
}
/* Required resolution not found, decreasing resolution */
for (i = streamList.size(); i > 0; --i) {
_info = &(streamList[i-1]);
if (_info->res1 < _res) {
_res = _info->res1;
resIO = true;
break;
}
}
/* Required resolution not found, increasing resolution */
if (resIO == false) {
for (i = 0; i < streamList.size(); ++i) {
_info = &(streamList[i]);
if (_info->res1 > _res) {
_res = _info->res1;
break;
}
}
}
}
return false;
}
bool CMoviePlayerGui::PlayBackgroundStart(const std::string &file, const std::string &name, t_channel_id chan, const std::string &script)
{
printf("%s: starting...\n", __func__);
static CZapProtection *zp = NULL;
@@ -715,6 +843,40 @@ bool CMoviePlayerGui::PlayBackgroundStart(const std::string &file, const std::st
}
}
static t_channel_id oldChan = 0;
std::string realUrl = file;
std::string _pretty_name = name;
std::string _epgTitle = name;
std::string _script = script;
livestream_info_t info;
if (!_script.empty()) {
if (_script.find("/") == std::string::npos)
_script = g_settings.livestreamScriptPath + "/" + _script;
size_t pos = _script.find(".lua");
if ((file_exists(_script.c_str())) && (pos != std::string::npos) && (_script.length()-pos == 4)) {
if ((oldChan != chan) || liveStreamList.empty()) {
liveStreamList.clear();
if (!luaGetUrl(_script, file, liveStreamList))
return false;
oldChan = chan;
}
if (!selectLivestream(liveStreamList, g_settings.livestreamResolution, &info))
return false;
realUrl = info.url;
if (!info.name.empty()) {
_pretty_name = info.name;
_epgTitle = info.name;
}
if (!info.resolution.empty())
_epgTitle += (std::string)" (" + info.resolution + ")";
}
else
return false;
}
OpenThreads::ScopedLock<OpenThreads::Mutex> m_lock(mutex);
instance_bg->Cleanup();
@@ -724,12 +886,11 @@ bool CMoviePlayerGui::PlayBackgroundStart(const std::string &file, const std::st
instance_bg->isWebTV = true;
instance_bg->is_file_player = true;
instance_bg->isHTTP = true;
instance_bg->file_name = realUrl;
instance_bg->pretty_name = _pretty_name;
instance_bg->file_name = file;
instance_bg->pretty_name = name;
instance_bg->movie_info.epgTitle = name;
instance_bg->movie_info.epgChannel = file;
instance_bg->movie_info.epgTitle = _epgTitle;
instance_bg->movie_info.epgChannel = realUrl;
instance_bg->movie_info.epgId = chan;
instance_bg->p_movie_info = &movie_info;

View File

@@ -85,6 +85,15 @@ class CMoviePlayerGui : public CMenuTarget
enum repeat_mode_enum { REPEAT_OFF = 0, REPEAT_TRACK = 1, REPEAT_ALL = 2 };
private:
typedef struct livestream_info_t
{
std::string url;
std::string name;
std::string resolution;
int res1;
int bandwidth;
} livestream_info_struct_t;
CFrameBuffer * frameBuffer;
int m_LastMode;
@@ -159,6 +168,7 @@ class CMoviePlayerGui : public CMenuTarget
std::string Path_local;
int menu_ret;
bool autoshot_done;
std::vector<livestream_info_t> liveStreamList;
/* playback from bookmark */
static CBookmarkManager * bookmarkmanager;
@@ -207,6 +217,9 @@ class CMoviePlayerGui : public CMenuTarget
void EnableClockAndMute(bool enable);
static void *ShowStartHint(void *arg);
static void* bgPlayThread(void *arg);
static bool sortStreamList(livestream_info_t info1, livestream_info_t info2);
bool selectLivestream(std::vector<livestream_info_t> &streamList, int res, livestream_info_t* info);
bool luaGetUrl(const std::string &script, const std::string &file, std::vector<livestream_info_t> &streamList);
CMoviePlayerGui(const CMoviePlayerGui&) {};
CMoviePlayerGui();
@@ -227,7 +240,7 @@ class CMoviePlayerGui : public CMenuTarget
int timeshift;
int file_prozent;
void SetFile(std::string &name, std::string &file, std::string info1="", std::string info2="") { pretty_name = name; file_name = file; info_1 = info1; info_2 = info2; }
bool PlayBackgroundStart(const std::string &file, const std::string &name, t_channel_id chan);
bool PlayBackgroundStart(const std::string &file, const std::string &name, t_channel_id chan, const std::string &script="");
void stopPlayBack(void);
void setLastMode(int m) { m_LastMode = m; }
void Pause(bool b = true);

View File

@@ -71,12 +71,14 @@
#include <gui/network_setup.h>
#include <gui/update_menue.h>
#include <gui/hdd_menu.h>
#include <gui/webtv_setup.h>
#include <driver/radiotext.h>
#include <driver/record.h>
#include <driver/screen_max.h>
#include <system/helpers.h>
#include <zapit/zapit.h>
#include <daemonc/remotecontrol.h>
extern CRemoteControl * g_RemoteControl; /* neutrino.cpp */
@@ -178,7 +180,9 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg)
else
menu->addItem(GenericMenuSeparator);
bool _mode_ts = CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_ts;
bool _mode_ts = CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_ts;
bool _mode_webtv = (CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_webtv) &&
(!CZapit::getInstance()->GetCurrentChannel()->getScriptName().empty());
std::string itemstr_last("1");
@@ -264,6 +268,8 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg)
{
if (g_RemoteControl->subChannels.empty())
break;
if (_mode_webtv)
break;
// NVOD/SubService- Kanal!
CMenuWidget *tmpNVODSelector = new CMenuWidget(g_RemoteControl->are_subchannels ? LOCALE_NVODSELECTOR_SUBSERVICE : LOCALE_NVODSELECTOR_STARTTIME, NEUTRINO_ICON_VIDEO);
if (!subchanselect.getNVODMenu(tmpNVODSelector)) {
@@ -430,6 +436,13 @@ bool CUserMenu::showUserMenu(neutrino_msg_t msg)
menu_item = new CMenuDForwarder(LOCALE_SERVICEMENU_UPDATE, true, NULL, new CSoftwareUpdate(), NULL, key, icon);
menu_item->setHint(NEUTRINO_ICON_HINT_SW_UPDATE, LOCALE_MENU_HINT_SW_UPDATE);
break;
case SNeutrinoSettings::ITEM_LIVESTREAM_RESOLUTION:
if (!_mode_webtv)
break;
keyhelper.get(&key,&icon);
menu_item = new CMenuDForwarder(LOCALE_LIVESTREAM_RESOLUTION, true, NULL, new CWebTVResolution(), NULL, key, icon);
//menu_item->setHint(xx, yy);
break;
case -1: // plugin
{
int number_of_plugins = g_PluginList->getNumberOfPlugins();
@@ -511,6 +524,7 @@ const char *CUserMenu::getUserMenuButtonName(int button, bool &active, bool retu
continue;
case SNeutrinoSettings::ITEM_NONE:
case SNeutrinoSettings::ITEM_BAR:
case SNeutrinoSettings::ITEM_LIVESTREAM_RESOLUTION:
continue;
case SNeutrinoSettings::ITEM_EPG_MISC:
return_title = true;

View File

@@ -111,6 +111,7 @@ static keyvals usermenu_items[] =
{ SNeutrinoSettings::ITEM_HDDMENU, LOCALE_HDD_SETTINGS, usermenu_show },
{ SNeutrinoSettings::ITEM_NETSETTINGS, LOCALE_MAINSETTINGS_NETWORK, usermenu_show },
{ SNeutrinoSettings::ITEM_SWUPDATE, LOCALE_SERVICEMENU_UPDATE, usermenu_show },
{ SNeutrinoSettings::ITEM_LIVESTREAM_RESOLUTION,LOCALE_LIVESTREAM_RESOLUTION, usermenu_show },
{ SNeutrinoSettings::ITEM_MAX, NONEXISTANT_LOCALE, usermenu_show }
};

View File

@@ -29,7 +29,9 @@
#include <neutrino.h>
#include <driver/screen_max.h>
#include <driver/framebuffer.h>
#include <gui/movieplayer.h>
#include <gui/widget/hintbox.h>
#include <zapit/zapit.h>
#include <neutrino_menue.h>
#include "webtv_setup.h"
@@ -41,6 +43,17 @@ CWebTVSetup::CWebTVSetup()
changed = false;
}
#define LIVESTREAM_RESOLUTION_OPTION_COUNT 6
const CMenuOptionChooser::keyval_ext LIVESTREAM_RESOLUTION_OPTIONS[LIVESTREAM_RESOLUTION_OPTION_COUNT] =
{
{ 1920, NONEXISTANT_LOCALE, "1920x1080" },
{ 1280, NONEXISTANT_LOCALE, "1280x720" },
{ 854, NONEXISTANT_LOCALE, "854x480" },
{ 640, NONEXISTANT_LOCALE, "640x360" },
{ 426, NONEXISTANT_LOCALE, "426x240" },
{ 128, NONEXISTANT_LOCALE, "128x72" }
};
#define CWebTVSetupFooterButtonCount 2
static const struct button_label CWebTVSetupFooterButtons[CWebTVSetupFooterButtonCount] = {
{ NEUTRINO_ICON_BUTTON_RED, LOCALE_WEBTV_XML_DEL },
@@ -91,6 +104,11 @@ int CWebTVSetup::exec(CMenuTarget* parent, const std::string & actionKey)
}
return res;
}
if (actionKey == "script_path") {
const char *action_str = "ScriptPath";
chooserDir(g_settings.livestreamScriptPath, false, action_str);
return res;
}
if(parent)
parent->hide();
@@ -108,10 +126,26 @@ int CWebTVSetup::Show()
m->addKey(CRCInput::RC_red, this, "d");
m->addKey(CRCInput::RC_green, this, "a");
m->addIntroItems(LOCALE_WEBTV_HEAD, LOCALE_WEBTV_XML);
m->addIntroItems(LOCALE_WEBTV_HEAD, LOCALE_LIVESTREAM_HEAD);
bool _mode_webtv = (CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_webtv) &&
(!CZapit::getInstance()->GetCurrentChannel()->getScriptName().empty());
CMenuForwarder *mf;
int shortcut = 1;
mf = new CMenuForwarder(LOCALE_LIVESTREAM_SCRIPTPATH, !_mode_webtv, g_settings.livestreamScriptPath, this, "script_path", CRCInput::convertDigitToKey(shortcut++));
m->addItem(mf);
#if 0
mf = new CMenuForwarder(LOCALE_LIVESTREAM_RESOLUTION, _mode_webtv, NULL, new CWebTVResolution(), NULL, CRCInput::convertDigitToKey(shortcut++));
m->addItem(mf);
#endif
m->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_WEBTV_XML));
item_offset = m->getItemsCount();
for (std::list<std::string>::iterator it = g_settings.webtv_xml.begin(); it != g_settings.webtv_xml.end(); ++it)
m->addItem(new CMenuForwarder(*it, true, NULL, this, "c"));
m->setFooter(CWebTVSetupFooterButtons, CWebTVSetupFooterButtonCount); //Why we need here an extra buttonbar?
int res = m->exec(NULL, "");
@@ -131,4 +165,49 @@ int CWebTVSetup::Show()
return res;
}
/* ## CWebTVResolution ############################################# */
CWebTVResolution::CWebTVResolution()
{
width = 40;
}
int CWebTVResolution::exec(CMenuTarget* parent, const std::string& /*actionKey*/)
{
if (parent)
parent->hide();
return Show();
}
int CWebTVResolution::Show()
{
m = new CMenuWidget(LOCALE_WEBTV_HEAD, NEUTRINO_ICON_MOVIEPLAYER, width, MN_WIDGET_ID_LIVESTREAM_RESOLUTION);
m->addIntroItems(LOCALE_LIVESTREAM_HEAD);
CMenuOptionChooser *mc;
mc = new CMenuOptionChooser(LOCALE_LIVESTREAM_RESOLUTION, &g_settings.livestreamResolution,
LIVESTREAM_RESOLUTION_OPTIONS, LIVESTREAM_RESOLUTION_OPTION_COUNT,
true, NULL, CRCInput::RC_nokey, NULL, true);
m->addItem(mc);
int oldRes = g_settings.livestreamResolution;
int res = m->exec(NULL, "");
m->hide();
delete m;
bool _mode_webtv = (CNeutrinoApp::getInstance()->getMode() == NeutrinoMessages::mode_webtv) &&
(!CZapit::getInstance()->GetCurrentChannel()->getScriptName().empty());
if (oldRes != g_settings.livestreamResolution && _mode_webtv) {
CZapitChannel * cc = CZapit::getInstance()->GetCurrentChannel();
if (cc && IS_WEBTV(cc->getChannelID())) {
CMoviePlayerGui::getInstance().stopPlayBack();
CMoviePlayerGui::getInstance().PlayBackgroundStart(cc->getUrl(), cc->getName(), cc->getChannelID(), cc->getScriptName());
}
}
return res;
}
// vim:ts=4

View File

@@ -40,4 +40,16 @@ class CWebTVSetup : public CMenuTarget
int exec(CMenuTarget* parent, const std::string & actionKey);
int Show();
};
class CWebTVResolution : public CMenuTarget
{
private:
int width;
CMenuWidget *m;
public:
CWebTVResolution();
int exec(CMenuTarget* parent, const std::string & actionKey);
int Show();
};
#endif

View File

@@ -288,7 +288,7 @@ const lcd_setting_struct_t lcd_setting[SNeutrinoSettings::LCD_SETTING_COUNT] =
static SNeutrinoSettings::usermenu_t usermenu_default[] = {
{ CRCInput::RC_red, "2,3,4,13", "", "red" },
{ CRCInput::RC_green, "6", "", "green" },
{ CRCInput::RC_yellow, "7", "", "yellow" },
{ CRCInput::RC_yellow, "7,31", "", "yellow" },
{ CRCInput::RC_blue, "12,11,20,21,19,14,29,30,15", "", "blue" },
{ CRCInput::RC_play, "9", "", "5" },
{ CRCInput::RC_audio, "27", "", "6" },
@@ -906,6 +906,9 @@ int CNeutrinoApp::loadSetup(const char * fname)
g_settings.infoClockBackground = configfile.getInt32("infoClockBackground", 0);
g_settings.infoClockSeconds = configfile.getInt32("infoClockSeconds", 1);
g_settings.livestreamResolution = configfile.getInt32("livestreamResolution", 1920);
g_settings.livestreamScriptPath = configfile.getString("livestreamScriptPath", PLUGINDIR_VAR "/webtv");
if(erg)
configfile.setModifiedFlag(true);
return erg;
@@ -1342,6 +1345,9 @@ void CNeutrinoApp::saveSetup(const char * fname)
configfile.setInt32("infoClockSeconds", g_settings.infoClockSeconds);
configfile.setInt32("easymenu", g_settings.easymenu);
configfile.setInt32("livestreamResolution", g_settings.livestreamResolution);
configfile.setString("livestreamScriptPath", g_settings.livestreamScriptPath);
if(strcmp(fname, NEUTRINO_SETTINGS_FILE) || configfile.getModifiedFlag())
configfile.saveConfig(fname);
}
@@ -2704,7 +2710,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data)
CZapitChannel * cc = CZapit::getInstance()->GetCurrentChannel();
if (cc && (chid == cc->getChannelID())) {
CMoviePlayerGui::getInstance().stopPlayBack();
if (CMoviePlayerGui::getInstance().PlayBackgroundStart(cc->getUrl(), cc->getName(), cc->getChannelID()))
if (CMoviePlayerGui::getInstance().PlayBackgroundStart(cc->getUrl(), cc->getName(), cc->getChannelID(), cc->getScriptName()))
delete [] (unsigned char*) data;
else
g_RCInput->postMsg(NeutrinoMessages::EVT_ZAP_FAILED, data);
@@ -3293,7 +3299,8 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data)
CZapitChannel * cc = CZapit::getInstance()->GetCurrentChannel();
if (cc && IS_WEBTV(cc->getChannelID())) {
CMoviePlayerGui::getInstance().stopPlayBack();
CMoviePlayerGui::getInstance().PlayBackgroundStart(cc->getUrl(), cc->getName(), cc->getChannelID());
if (!CMoviePlayerGui::getInstance().PlayBackgroundStart(cc->getUrl(), cc->getName(), cc->getChannelID(), cc->getScriptName()))
g_RCInput->postMsg(NeutrinoMessages::EVT_ZAP_FAILED, data);
}
}
}

View File

@@ -113,7 +113,8 @@ enum MN_WIDGET_ID
//web tv setup
MN_WIDGET_ID_WEBTVSETUP,
MN_WIDGET_ID_LIVESTREAM_RESOLUTION,
//misc settings
MN_WIDGET_ID_MISCSETUP,
MN_WIDGET_ID_MISCSETUP_GENERAL,

View File

@@ -905,6 +905,10 @@ typedef enum
LOCALE_LEDCONTROLER_ON_ALL,
LOCALE_LEDCONTROLER_ON_LED1,
LOCALE_LEDCONTROLER_ON_LED2,
LOCALE_LIVESTREAM_HEAD,
LOCALE_LIVESTREAM_READ_DATA,
LOCALE_LIVESTREAM_RESOLUTION,
LOCALE_LIVESTREAM_SCRIPTPATH,
LOCALE_LUA_BOOLPARAM_DEPRECATED1,
LOCALE_LUA_BOOLPARAM_DEPRECATED2,
LOCALE_LUA_BOOLPARAM_DEPRECATED3,

View File

@@ -905,6 +905,10 @@ const char * locale_real_names[] =
"ledcontroler.on.all",
"ledcontroler.on.led1",
"ledcontroler.on.led2",
"livestream.head",
"livestream.read_data",
"livestream.resolution",
"livestream.scriptpath",
"lua.boolparam_deprecated1",
"lua.boolparam_deprecated2",
"lua.boolparam_deprecated3",

View File

@@ -739,6 +739,9 @@ struct SNeutrinoSettings
std::string font_file;
std::string ttx_font_file;
int livestreamResolution;
std::string livestreamScriptPath;
// USERMENU
typedef enum
{
@@ -783,6 +786,8 @@ struct SNeutrinoSettings
ITEM_NETSETTINGS = 29,
ITEM_SWUPDATE = 30,
ITEM_LIVESTREAM_RESOLUTION = 31,
ITEM_MAX // MUST be always the last in the list
} USER_ITEM;
typedef struct {