From 5bd14ea4b873f15b850bc7517177e62ca06a9f2d Mon Sep 17 00:00:00 2001 From: "[CST] Focus" Date: Tue, 11 Nov 2014 14:39:16 +0300 Subject: [PATCH] neutrino: try to fix parental bypass by quit from audio player / picture viewer / movie player and starting channel in PiP --- src/gui/channellist.cpp | 28 +++++++++++++++++++--------- src/gui/channellist.h | 2 +- src/gui/movieplayer.cpp | 13 ++++++++----- src/neutrino.cpp | 2 ++ 4 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/gui/channellist.cpp b/src/gui/channellist.cpp index 6014c0357..cf0533285 100644 --- a/src/gui/channellist.cpp +++ b/src/gui/channellist.cpp @@ -886,10 +886,7 @@ int CChannelList::show() calcSize(); paint(); } else { - if(CNeutrinoApp::getInstance()->StartPip((*chanlist)[selected]->getChannelID())) { - calcSize(); - paint(); - } + handleMsg(NeutrinoMessages::EVT_PROGRAMLOCKSTATUS, 0x100, true); } } } @@ -973,7 +970,7 @@ bool CChannelList::showInfo(int number, int epgpos) return true; } -int CChannelList::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data) +int CChannelList::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data, bool pip) { bool startvideo = true; @@ -1014,9 +1011,15 @@ int CChannelList::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data) if (data >= 0x100 && (*chanlist)[selected]->last_unlocked_time + g_settings.parentallock_zaptime * 60 > time_monotonic()) goto out; + if (pip && (*chanlist)[selected]->Locked() == g_settings.parentallock_defaultlocked) + goto out; + /* OK, let's ask for a PIN */ - g_RemoteControl->stopvideo(); - //printf("stopped video\n"); + if (!pip) { + g_RemoteControl->is_video_started = true; + g_RemoteControl->stopvideo(); + //printf("stopped video\n"); + } zapProtection = new CZapProtection(g_settings.parentallock_pincode, data); if (zapProtection->check()) @@ -1051,8 +1054,15 @@ int CChannelList::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data) zapProtection = NULL; out: - if (startvideo) - g_RemoteControl->startvideo(); + if (startvideo) { + if(pip) { + if (CNeutrinoApp::getInstance()->StartPip((*chanlist)[selected]->getChannelID())) { + calcSize(); + paint(); + } + } else + g_RemoteControl->startvideo(); + } return messages_return::handled; } diff --git a/src/gui/channellist.h b/src/gui/channellist.h index 559851f8f..964aa0a81 100644 --- a/src/gui/channellist.h +++ b/src/gui/channellist.h @@ -210,7 +210,7 @@ public: int hasChannelID(t_channel_id channel_id); void setSelected( int nChannelNr); // for adjusting bouquet's channel list after numzap or quickzap - int handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data); + int handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data, bool pip = false); int getSize() const; bool isEmpty() const; diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index 547cd5deb..582563b07 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -179,8 +179,10 @@ void CMoviePlayerGui::cutNeutrino() if (!isWebTV) g_Sectionsd->setPauseScanning(true); - m_LastMode = (CNeutrinoApp::getInstance()->getMode() | NeutrinoMessages::norezap); -printf("%s: save mode %d\n", __func__, m_LastMode & NeutrinoMessages::mode_mask);fflush(stdout); + m_LastMode = (CNeutrinoApp::getInstance()->getMode() /*| NeutrinoMessages::norezap*/); + if (isWebTV) + m_LastMode |= NeutrinoMessages::norezap; + printf("%s: save mode %x\n", __func__, m_LastMode);fflush(stdout); int new_mode = NeutrinoMessages::norezap | (isWebTV ? NeutrinoMessages::mode_webtv : NeutrinoMessages::mode_ts); CNeutrinoApp::getInstance()->handleMsg(NeutrinoMessages::CHANGEMODE, new_mode); } @@ -199,10 +201,11 @@ void CMoviePlayerGui::restoreNeutrino() g_Zapit->unlockPlayBack(); g_Sectionsd->setPauseScanning(false); -printf("%s: restore mode %d\n", __func__, m_LastMode & NeutrinoMessages::mode_mask);fflush(stdout); + printf("%s: restore mode %x\n", __func__, m_LastMode);fflush(stdout); +#if 0 if (m_LastMode == NeutrinoMessages::mode_tv) g_RCInput->postMsg(NeutrinoMessages::EVT_PROGRAMLOCKSTATUS, 0x200, false); - +#endif if (m_LastMode != NeutrinoMessages::mode_unknown) CNeutrinoApp::getInstance()->handleMsg(NeutrinoMessages::CHANGEMODE, m_LastMode); @@ -213,7 +216,7 @@ printf("%s: restore mode %d\n", __func__, m_LastMode & NeutrinoMessages::mode_ma CZapit::getInstance()->Rezap(); } #endif -printf("%s: restoring done.\n", __func__);fflush(stdout); + printf("%s: restoring done.\n", __func__);fflush(stdout); } int CMoviePlayerGui::exec(CMenuTarget * parent, const std::string & actionKey) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 5cc497dee..9cfc60565 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -3745,8 +3745,10 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) CMoviePlayerGui::getInstance().exec(NULL, actionKey); if(_mode == NeutrinoMessages::mode_radio ) videoDecoder->ShowPicture(DATADIR "/neutrino/icons/radiomode.jpg"); +#if 0 else if (_mode == mode_webtv) tvMode(true); +#endif return menu_return::RETURN_EXIT_ALL; } else if(actionKey=="audioplayer" || actionKey == "inetplayer") {