From 63592d04894df513a3258b95e3f51379a1e17560 Mon Sep 17 00:00:00 2001 From: TangoCash Date: Sun, 28 Oct 2018 13:06:12 +0100 Subject: [PATCH] add option to map xml epg to normal channels Signed-off-by: Thilo Graf --- data/epgmap.xml | 3 +++ src/zapit/include/zapit/bouquets.h | 2 ++ src/zapit/include/zapit/channel.h | 1 + src/zapit/src/bouquets.cpp | 40 ++++++++++++++++++++++++------ 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/data/epgmap.xml b/data/epgmap.xml index 49cead598..e5264d094 100644 --- a/data/epgmap.xml +++ b/data/epgmap.xml @@ -16,4 +16,7 @@ --rainews24 --Das Erste + + RTL.de --RTL HD + RedlightHD.ero --Redlight HD diff --git a/src/zapit/include/zapit/bouquets.h b/src/zapit/include/zapit/bouquets.h index 22de6162e..12f38d84d 100644 --- a/src/zapit/include/zapit/bouquets.h +++ b/src/zapit/include/zapit/bouquets.h @@ -106,8 +106,10 @@ class CBouquetManager void writeBouquet(FILE * bouq_fd, uint32_t i, bool bUser); //remap epg_id std::map EpgIDMapping; + std::map EpgXMLMapping; void readEPGMapping(); t_channel_id reMapEpgID(t_channel_id channelid); + std::string reMapEpgXML(t_channel_id channelid); //logo downloads static void* LogoThread(void* _logolist); pthread_t thrLogo; diff --git a/src/zapit/include/zapit/channel.h b/src/zapit/include/zapit/channel.h index 9a8fe2c1e..3bc586bd8 100644 --- a/src/zapit/include/zapit/channel.h +++ b/src/zapit/include/zapit/channel.h @@ -219,6 +219,7 @@ class CZapitChannel t_transport_stream_id getTransportStreamId(void) const { return transport_stream_id; } t_original_network_id getOriginalNetworkId(void) const { return original_network_id; } std::string getScriptName(void) const { return script; } + inline void setScriptName(const std::string &pscript) { script = pscript; } unsigned char getServiceType(bool real=false); bool isUHD(); bool isHD(); diff --git a/src/zapit/src/bouquets.cpp b/src/zapit/src/bouquets.cpp index 54639142f..71debc435 100644 --- a/src/zapit/src/bouquets.cpp +++ b/src/zapit/src/bouquets.cpp @@ -478,7 +478,12 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser) t_channel_id new_epgid = reMapEpgID(chan->getChannelID()); if(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); } else if (bUser) { if (url) { @@ -516,6 +521,9 @@ void CBouquetManager::parseBouquetsXml(const char *fname, bool bUser) if(!bUser && !EpgIDMapping.empty()){ EpgIDMapping.clear(); } + if(!bUser && !EpgXMLMapping.empty()){ + EpgXMLMapping.clear(); + } } xmlFreeDoc(parser); } @@ -1250,11 +1258,24 @@ t_channel_id CBouquetManager::reMapEpgID(t_channel_id channelid) return 0; } +std::string CBouquetManager::reMapEpgXML(t_channel_id channelid) +{ + if(!EpgXMLMapping.empty()){ + std::map::iterator it = EpgXMLMapping.find(channelid); + if ( it != EpgXMLMapping.end() ) + return it->second; + } + return ""; +} + void CBouquetManager::readEPGMapping() { if(!EpgIDMapping.empty()) EpgIDMapping.clear(); + if(!EpgXMLMapping.empty()) + EpgXMLMapping.clear(); + const std::string epg_map_dir = CONFIGDIR "/zapit/epgmap.xml"; xmlDocPtr epgmap_parser = parseXmlFile(epg_map_dir.c_str()); @@ -1267,18 +1288,21 @@ void CBouquetManager::readEPGMapping() 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 *xmlepg = xmlGetData(epgmap); t_channel_id epg_id = 0; - t_channel_id chid = 0; + t_channel_id channel_id = 0; if (epgid) epg_id = strtoull(epgid, NULL, 16); - if (cannelid) - chid = strtoull(cannelid, NULL, 16); - if(chid && epg_id){ - EpgIDMapping[chid]=epg_id; + if (channelid) + channel_id = strtoull(channelid, NULL, 16); + if(channel_id && epg_id){ + EpgIDMapping[channel_id]=epg_id; + } + if(channel_id && xmlepg){ + EpgXMLMapping[channel_id]=xmlepg; } - epgmap = xmlNextNode(epgmap); } }