mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-29 16:31:11 +02:00
CControlAPI:: -add epgsearchxml & epgsearch
This commit is contained in:
@@ -155,8 +155,10 @@ const CControlAPI::TyCgiCall CControlAPI::yCgiCallList[]=
|
|||||||
{"getbouquets", &CControlAPI::GetBouquetsCGI, "+xml"},
|
{"getbouquets", &CControlAPI::GetBouquetsCGI, "+xml"},
|
||||||
{"getmode", &CControlAPI::GetModeCGI, "text/plain"},
|
{"getmode", &CControlAPI::GetModeCGI, "text/plain"},
|
||||||
{"setmode", &CControlAPI::SetModeCGI, "text/plain"},
|
{"setmode", &CControlAPI::SetModeCGI, "text/plain"},
|
||||||
{"epg", &CControlAPI::EpgCGI, ""},
|
{"epgsearchxml", &CControlAPI::EpgSearchXMLCGI, ""},
|
||||||
{"zapto", &CControlAPI::ZaptoCGI, "text/plain"},
|
{"epgsearch", &CControlAPI::EpgSearchTXTCGI, ""},
|
||||||
|
{"epg", &CControlAPI::EpgCGI, ""},
|
||||||
|
{"zapto", &CControlAPI::ZaptoCGI, "text/plain"},
|
||||||
{"getonidsid", &CControlAPI::GetChannel_IDCGI, "text/plain"},
|
{"getonidsid", &CControlAPI::GetChannel_IDCGI, "text/plain"},
|
||||||
{"currenttpchannels", &CControlAPI::GetTPChannel_IDCGI, "text/plain"},
|
{"currenttpchannels", &CControlAPI::GetTPChannel_IDCGI, "text/plain"},
|
||||||
// boxcontrol - system
|
// boxcontrol - system
|
||||||
@@ -1283,6 +1285,128 @@ void CControlAPI::epgDetailList(CyhookHandler *hh) {
|
|||||||
hh->WriteLn(result);
|
hh->WriteLn(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//-------------------------------------------------------------------------------------------------
|
||||||
|
inline static bool sortByDateTime (const CChannelEvent& a, const CChannelEvent& b)
|
||||||
|
{
|
||||||
|
return a.startTime < b.startTime;
|
||||||
|
}
|
||||||
|
extern const char * GetGenre(const unsigned char contentClassification); // UTF-8
|
||||||
|
void CControlAPI::EpgSearchXMLCGI(CyhookHandler *hh)
|
||||||
|
{
|
||||||
|
EpgSearchCGI(hh, true);//xml_forat = true
|
||||||
|
}
|
||||||
|
void CControlAPI::EpgSearchTXTCGI(CyhookHandler *hh)
|
||||||
|
{
|
||||||
|
EpgSearchCGI(hh, false);//xml_forat = false
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlAPI::EpgSearchCGI(CyhookHandler *hh, bool xml_forat )
|
||||||
|
{
|
||||||
|
t_channel_id channel_id;
|
||||||
|
CChannelEventList evtlist;
|
||||||
|
bool param_empty = hh->ParamList.empty();
|
||||||
|
const int m_search_epg_item = 5;
|
||||||
|
if(!param_empty){
|
||||||
|
if(xml_forat){
|
||||||
|
hh->SetHeader(HTTP_OK, "text/xml; charset=UTF-8");
|
||||||
|
hh->WriteLn("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
|
||||||
|
hh->WriteLn("<neutrino commandversion=\"1\">");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
hh->SetHeader(HTTP_OK, "text/plain; charset=UTF-8"); // default
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string m_search_keyword =hh->ParamList["1"];
|
||||||
|
|
||||||
|
std::vector<t_channel_id> v;
|
||||||
|
int channel_nr = CNeutrinoApp::getInstance ()->channelList->getSize();//unique channelList TV or Radio
|
||||||
|
for(int channel = 0; channel < channel_nr; channel++){
|
||||||
|
channel_id = CNeutrinoApp::getInstance ()->channelList->getChannelFromIndex(channel)->channel_id;
|
||||||
|
v.push_back(channel_id);
|
||||||
|
}
|
||||||
|
std::map<t_channel_id, t_channel_id> ch_id_map;
|
||||||
|
std::vector<t_channel_id>::iterator it;
|
||||||
|
for (it = v.begin(); it != v.end(); ++it){
|
||||||
|
ch_id_map[*it & 0xFFFFFFFFFFFFULL] = *it;
|
||||||
|
}
|
||||||
|
CEitManager::getInstance()->getEventsServiceKey(0,evtlist, m_search_epg_item,m_search_keyword, true);//all_chann
|
||||||
|
|
||||||
|
if(!evtlist.empty()){
|
||||||
|
std::map<t_channel_id, t_channel_id>::iterator map_it;
|
||||||
|
CChannelEventList::iterator e;
|
||||||
|
for ( e=evtlist.begin(); e!=evtlist.end();++e){
|
||||||
|
map_it = ch_id_map.find(e->channelID);
|
||||||
|
if (map_it != ch_id_map.end()){
|
||||||
|
e->channelID = map_it->second;//map channelID48 to channelID
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
evtlist.erase(e--);// remove event for not found channels in channelList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!evtlist.empty()){
|
||||||
|
sort(evtlist.begin(),evtlist.end(),sortByDateTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
time_t azeit=time(NULL);
|
||||||
|
CShortEPGData epg;
|
||||||
|
CEPGData longepg;
|
||||||
|
char tmpstr[256] ={0};
|
||||||
|
CChannelEventList::iterator eventIterator;
|
||||||
|
unsigned int u_azeit = ( azeit > -1)? azeit:0;
|
||||||
|
for (eventIterator = evtlist.begin(); eventIterator != evtlist.end(); ++eventIterator){
|
||||||
|
if (CEitManager::getInstance()->getEPGidShort(eventIterator->eventID, &epg)) {
|
||||||
|
if( (eventIterator->startTime+eventIterator->duration) < u_azeit)
|
||||||
|
continue;
|
||||||
|
struct tm *tmStartZeit = localtime(&eventIterator->startTime);
|
||||||
|
if(xml_forat){
|
||||||
|
hh->printf("\t<epgsearch>");
|
||||||
|
hh->printf("\t\t<channelname>%s</channelname>\n",NeutrinoAPI->GetServiceName(eventIterator->channelID).c_str());
|
||||||
|
hh->printf("\t\t<epgtitle>%s</epgtitle>\n",ZapitTools::UTF8_to_UTF8XML(epg.title.c_str()).c_str());
|
||||||
|
hh->printf("\t\t<info1>%s</info1>\n",ZapitTools::UTF8_to_UTF8XML(epg.info1.c_str()).c_str());
|
||||||
|
hh->printf("\t\t<info2>%s</info2>\n",ZapitTools::UTF8_to_UTF8XML(epg.info2.c_str()).c_str());
|
||||||
|
if (CEitManager::getInstance()->getEPGid(eventIterator->eventID, eventIterator->startTime, &longepg)) {
|
||||||
|
hh->printf("\t\t<fsk>%u</fsk>\n", longepg.fsk);
|
||||||
|
if (longepg.contentClassification.length()> 0){
|
||||||
|
std::string genere = GetGenre(longepg.contentClassification[0]);
|
||||||
|
hh->printf("\t\t<genre>%s</genre>\n", ZapitTools::UTF8_to_UTF8XML(genere.c_str()).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
strftime(tmpstr, sizeof(tmpstr), "%Y-%m-%d", tmStartZeit );
|
||||||
|
hh->printf("\t\t<date>%s</date>\n", tmpstr);
|
||||||
|
strftime(tmpstr, sizeof(tmpstr), ". %H:%M", tmStartZeit );
|
||||||
|
hh->printf("\t\t<time>%s</time>\n", tmpstr);
|
||||||
|
hh->printf("\t\t<duration>%d</duration>\n", eventIterator->duration);
|
||||||
|
hh->printf("\t\t\t<channel_id>" PRINTF_CHANNEL_ID_TYPE_NO_LEADING_ZEROS "</channel_id>\n",eventIterator->channelID);
|
||||||
|
hh->printf("\t\t\t<eventid>%ld</eventid>\n",eventIterator->eventID);
|
||||||
|
hh->printf("\t</epgsearch>");
|
||||||
|
}else{
|
||||||
|
std::string datetimer_str ;
|
||||||
|
strftime(tmpstr, sizeof(tmpstr), "%Y-%m-%d %H:%M", tmStartZeit );
|
||||||
|
datetimer_str = tmpstr;
|
||||||
|
datetimer_str += " ";
|
||||||
|
datetimer_str += g_Locale->getText(CLocaleManager::getMonth(tmStartZeit));
|
||||||
|
datetimer_str += " ";
|
||||||
|
datetimer_str += g_Locale->getText(CLocaleManager::getWeekday(tmStartZeit));
|
||||||
|
|
||||||
|
hh->WriteLn(datetimer_str);
|
||||||
|
hh->WriteLn(NeutrinoAPI->GetServiceName(eventIterator->channelID));
|
||||||
|
hh->WriteLn(epg.title);
|
||||||
|
if(!epg.info1.empty())
|
||||||
|
hh->WriteLn(epg.info1);
|
||||||
|
if(!epg.info2.empty())
|
||||||
|
hh->WriteLn(epg.info2);
|
||||||
|
hh->WriteLn("----------------------------------------------------------");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(xml_forat)
|
||||||
|
hh->printf("</neutrino>");
|
||||||
|
}else
|
||||||
|
hh->SendError();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
/** Return EPG data
|
/** Return EPG data
|
||||||
@@ -1300,6 +1424,7 @@ void CControlAPI::epgDetailList(CyhookHandler *hh) {
|
|||||||
* stoptime : show only items until stoptime reached
|
* stoptime : show only items until stoptime reached
|
||||||
* @endcode
|
* @endcode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
void CControlAPI::EpgCGI(CyhookHandler *hh) {
|
void CControlAPI::EpgCGI(CyhookHandler *hh) {
|
||||||
NeutrinoAPI->eList.clear();
|
NeutrinoAPI->eList.clear();
|
||||||
|
@@ -40,7 +40,9 @@ private:
|
|||||||
void SendTimers(CyhookHandler *hh);
|
void SendTimers(CyhookHandler *hh);
|
||||||
void SendTimersXML(CyhookHandler *hh);
|
void SendTimersXML(CyhookHandler *hh);
|
||||||
void epgDetailList(CyhookHandler *hh);
|
void epgDetailList(CyhookHandler *hh);
|
||||||
|
void EpgSearchXMLCGI(CyhookHandler *hh);
|
||||||
|
void EpgSearchTXTCGI(CyhookHandler *hh);
|
||||||
|
void EpgSearchCGI(CyhookHandler *hh, bool xml_forat = false);
|
||||||
// subs
|
// subs
|
||||||
friend class CNeutrinoWebserver; // for timer /fb/ compatibility
|
friend class CNeutrinoWebserver; // for timer /fb/ compatibility
|
||||||
void doModifyTimer(CyhookHandler *hh);
|
void doModifyTimer(CyhookHandler *hh);
|
||||||
|
Reference in New Issue
Block a user