diff --git a/lib/sectionsdclient/sectionsdclient.h b/lib/sectionsdclient/sectionsdclient.h index 6da654668..109cff9b0 100644 --- a/lib/sectionsdclient/sectionsdclient.h +++ b/lib/sectionsdclient/sectionsdclient.h @@ -84,7 +84,8 @@ class CSectionsdClient : private CBasicClient EVT_SERVICES_UPDATE, EVT_BOUQUETS_UPDATE, #endif - EVT_WRITE_SI_FINISHED + EVT_WRITE_SI_FINISHED, + EVT_RELOAD_XMLTV }; struct epgflags { diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index c9f86bb0e..d88fccaef 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1037,6 +1037,10 @@ void CRCInput::getMsg_us(neutrino_msg_t * msg, neutrino_msg_data_t * data, uint6 case CSectionsdClient::EVT_BOUQUETS_UPDATE: break; #endif + case CSectionsdClient::EVT_RELOAD_XMLTV: + *msg = NeutrinoMessages::EVT_RELOAD_XMLTV; + *data = 0; + break; default: printf("[neutrino] event INITID_SECTIONSD - unknown eventID 0x%x\n", emsg.eventID ); } diff --git a/src/eitd/sectionsd.cpp b/src/eitd/sectionsd.cpp index 9c1a966e7..73dc9e823 100644 --- a/src/eitd/sectionsd.cpp +++ b/src/eitd/sectionsd.cpp @@ -2216,6 +2216,8 @@ static void *houseKeepingThread(void *) perror("sectionsd: pthread_create()"); } pthread_attr_destroy(&attr); + + eventServer->sendEvent(CSectionsdClient::EVT_RELOAD_XMLTV, CEventServer::INITID_SECTIONSD); } ecount = 0; } diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 5c0a2f75a..e0e29aa97 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -2921,6 +2921,7 @@ void CNeutrinoApp::InitSectiondClient() g_Sectionsd->registerEvent(CSectionsdClient::EVT_GOT_CN_EPG, 222, NEUTRINO_UDS_NAME); g_Sectionsd->registerEvent(CSectionsdClient::EVT_EIT_COMPLETE, 222, NEUTRINO_UDS_NAME); g_Sectionsd->registerEvent(CSectionsdClient::EVT_WRITE_SI_FINISHED, 222, NEUTRINO_UDS_NAME); + g_Sectionsd->registerEvent(CSectionsdClient::EVT_RELOAD_XMLTV, 222, NEUTRINO_UDS_NAME); } #if HAVE_CST_HARDWARE @@ -4720,6 +4721,14 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) g_volume->setVolumeExt((int)data); return messages_return::handled; } + else if (msg == NeutrinoMessages::EVT_RELOAD_XMLTV) { + for (std::list::iterator it = g_settings.xmltv_xml.begin(); it != g_settings.xmltv_xml.end(); ++it) + { + printf("CNeutrinoApp::handleMsg: Reading xmltv epg from %s ...\n", (*it).c_str()); + g_Sectionsd->readSIfromXMLTV((*it).c_str()); + } + return messages_return::handled; + } if ((msg >= CRCInput::RC_WithData) && (msg < CRCInput::RC_WithData + 0x10000000)) { INFO("###################################### DELETED msg %lx data %lx\n", msg, data); delete [] (unsigned char*) data; diff --git a/src/neutrinoMessages.h b/src/neutrinoMessages.h index 26d0bd546..de5774293 100644 --- a/src/neutrinoMessages.h +++ b/src/neutrinoMessages.h @@ -124,6 +124,9 @@ struct NeutrinoMessages { EVT_CA_MESSAGE = CRCInput::RC_Events + 60, /* data = CA_MESSAGE pointer */ EVT_SUBT_MESSAGE = CRCInput::RC_Events + 61, /* data = subtitles pointer */ EVT_AUTO_SET_VIDEOSYSTEM = CRCInput::RC_Events + 62, /* data = new video system */ + + /* sectionsd */ + EVT_RELOAD_XMLTV = CRCInput::RC_Events + 63, /* END */ EVT_CURRENTEPG = CRCInput::RC_WithData + 1,