mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-09-03 19:01:25 +02:00
add option to map xml epg to normal channels
Signed-off-by: Thilo Graf <dbt@novatux.de>
This commit is contained in:
@@ -16,4 +16,7 @@
|
|||||||
<filter channel_id="b12003ee00011078" new_epg_id="ac423070013e2144"/> --rainews24
|
<filter channel_id="b12003ee00011078" new_epg_id="ac423070013e2144"/> --rainews24
|
||||||
|
|
||||||
<filter channel_id="b4d6070800c80e26" new_epg_id="b45803fb0001283d"/> --Das Erste
|
<filter channel_id="b4d6070800c80e26" new_epg_id="b45803fb0001283d"/> --Das Erste
|
||||||
|
|
||||||
|
<filter channel_id="aa0004210001ef10" >RTL.de</filter> --RTL HD
|
||||||
|
<filter channel_id="b6ba3db8013e4224" >RedlightHD.ero</filter> --Redlight HD
|
||||||
</zapit>
|
</zapit>
|
||||||
|
@@ -106,8 +106,10 @@ class CBouquetManager
|
|||||||
void writeBouquet(FILE * bouq_fd, uint32_t i, bool bUser);
|
void writeBouquet(FILE * bouq_fd, uint32_t i, bool bUser);
|
||||||
//remap epg_id
|
//remap epg_id
|
||||||
std::map<t_channel_id, t_channel_id> EpgIDMapping;
|
std::map<t_channel_id, t_channel_id> EpgIDMapping;
|
||||||
|
std::map<t_channel_id, std::string> EpgXMLMapping;
|
||||||
void readEPGMapping();
|
void readEPGMapping();
|
||||||
t_channel_id reMapEpgID(t_channel_id channelid);
|
t_channel_id reMapEpgID(t_channel_id channelid);
|
||||||
|
std::string reMapEpgXML(t_channel_id channelid);
|
||||||
//logo downloads
|
//logo downloads
|
||||||
static void* LogoThread(void* _logolist);
|
static void* LogoThread(void* _logolist);
|
||||||
pthread_t thrLogo;
|
pthread_t thrLogo;
|
||||||
|
@@ -219,6 +219,7 @@ class CZapitChannel
|
|||||||
t_transport_stream_id getTransportStreamId(void) const { return transport_stream_id; }
|
t_transport_stream_id getTransportStreamId(void) const { return transport_stream_id; }
|
||||||
t_original_network_id getOriginalNetworkId(void) const { return original_network_id; }
|
t_original_network_id getOriginalNetworkId(void) const { return original_network_id; }
|
||||||
std::string getScriptName(void) const { return script; }
|
std::string getScriptName(void) const { return script; }
|
||||||
|
inline void setScriptName(const std::string &pscript) { script = pscript; }
|
||||||
unsigned char getServiceType(bool real=false);
|
unsigned char getServiceType(bool real=false);
|
||||||
bool isUHD();
|
bool isUHD();
|
||||||
bool isHD();
|
bool isHD();
|
||||||
|
@@ -478,7 +478,12 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser)
|
|||||||
t_channel_id new_epgid = reMapEpgID(chan->getChannelID());
|
t_channel_id new_epgid = reMapEpgID(chan->getChannelID());
|
||||||
if(new_epgid)
|
if(new_epgid)
|
||||||
chan->setEPGid(new_epgid);
|
chan->setEPGid(new_epgid);
|
||||||
|
std::string new_epgxml = reMapEpgXML(chan->getChannelID());
|
||||||
|
if(!new_epgxml.empty()) {
|
||||||
|
char buf[100];
|
||||||
|
snprintf(buf, sizeof(buf), "%llx", chan->getChannelID() & 0xFFFFFFFFFFFFULL);
|
||||||
|
chan->setScriptName("#" + new_epgxml + "=" + buf);
|
||||||
|
}
|
||||||
newBouquet->addService(chan);
|
newBouquet->addService(chan);
|
||||||
} else if (bUser) {
|
} else if (bUser) {
|
||||||
if (url) {
|
if (url) {
|
||||||
@@ -516,6 +521,9 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser)
|
|||||||
if(!bUser && !EpgIDMapping.empty()){
|
if(!bUser && !EpgIDMapping.empty()){
|
||||||
EpgIDMapping.clear();
|
EpgIDMapping.clear();
|
||||||
}
|
}
|
||||||
|
if(!bUser && !EpgXMLMapping.empty()){
|
||||||
|
EpgXMLMapping.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
xmlFreeDoc(parser);
|
xmlFreeDoc(parser);
|
||||||
}
|
}
|
||||||
@@ -1250,11 +1258,24 @@ t_channel_id CBouquetManager::reMapEpgID(t_channel_id channelid)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string CBouquetManager::reMapEpgXML(t_channel_id channelid)
|
||||||
|
{
|
||||||
|
if(!EpgXMLMapping.empty()){
|
||||||
|
std::map<t_channel_id, std::string>::iterator it = EpgXMLMapping.find(channelid);
|
||||||
|
if ( it != EpgXMLMapping.end() )
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
void CBouquetManager::readEPGMapping()
|
void CBouquetManager::readEPGMapping()
|
||||||
{
|
{
|
||||||
if(!EpgIDMapping.empty())
|
if(!EpgIDMapping.empty())
|
||||||
EpgIDMapping.clear();
|
EpgIDMapping.clear();
|
||||||
|
|
||||||
|
if(!EpgXMLMapping.empty())
|
||||||
|
EpgXMLMapping.clear();
|
||||||
|
|
||||||
const std::string epg_map_dir = CONFIGDIR "/zapit/epgmap.xml";
|
const std::string epg_map_dir = CONFIGDIR "/zapit/epgmap.xml";
|
||||||
xmlDocPtr epgmap_parser = parseXmlFile(epg_map_dir.c_str());
|
xmlDocPtr epgmap_parser = parseXmlFile(epg_map_dir.c_str());
|
||||||
|
|
||||||
@@ -1267,18 +1288,21 @@ void CBouquetManager::readEPGMapping()
|
|||||||
|
|
||||||
while (epgmap)
|
while (epgmap)
|
||||||
{
|
{
|
||||||
const char *cannelid = xmlGetAttribute(epgmap, "channel_id");
|
const char *channelid = xmlGetAttribute(epgmap, "channel_id");
|
||||||
const char *epgid = xmlGetAttribute(epgmap, "new_epg_id");
|
const char *epgid = xmlGetAttribute(epgmap, "new_epg_id");
|
||||||
|
const char *xmlepg = xmlGetData(epgmap);
|
||||||
t_channel_id epg_id = 0;
|
t_channel_id epg_id = 0;
|
||||||
t_channel_id chid = 0;
|
t_channel_id channel_id = 0;
|
||||||
if (epgid)
|
if (epgid)
|
||||||
epg_id = strtoull(epgid, NULL, 16);
|
epg_id = strtoull(epgid, NULL, 16);
|
||||||
if (cannelid)
|
if (channelid)
|
||||||
chid = strtoull(cannelid, NULL, 16);
|
channel_id = strtoull(channelid, NULL, 16);
|
||||||
if(chid && epg_id){
|
if(channel_id && epg_id){
|
||||||
EpgIDMapping[chid]=epg_id;
|
EpgIDMapping[channel_id]=epg_id;
|
||||||
|
}
|
||||||
|
if(channel_id && xmlepg){
|
||||||
|
EpgXMLMapping[channel_id]=xmlepg;
|
||||||
}
|
}
|
||||||
|
|
||||||
epgmap = xmlNextNode(epgmap);
|
epgmap = xmlNextNode(epgmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user