From 88949023f2260b967de0a460c7a911e714463aa8 Mon Sep 17 00:00:00 2001 From: janus Date: Tue, 12 May 2020 18:04:47 +0200 Subject: [PATCH 01/13] mine: add element 'bcID' to providermaps xml-structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit geändert: src/zapit/include/zapit/getservices.h geändert: src/zapit/src/getservices.cpp geändert: src/zapit/src/scansdt.cpp Enables separation of provider-bouquets amid 'position' i.e. 'Sky gb' (28.2E) 'Sky de' (19.2E), 'Sky it' (13.0E) --- src/zapit/include/zapit/getservices.h | 3 +- src/zapit/src/getservices.cpp | 94 +++++++++++++++------------ src/zapit/src/scansdt.cpp | 2 +- 3 files changed, 55 insertions(+), 44 deletions(-) diff --git a/src/zapit/include/zapit/getservices.h b/src/zapit/include/zapit/getservices.h index 4230200bf..f2aaf72a0 100644 --- a/src/zapit/include/zapit/getservices.h +++ b/src/zapit/include/zapit/getservices.h @@ -47,6 +47,7 @@ typedef std::pair channel_insert_res_t; struct provider_replace { + t_satellite_position satellite_position; t_transport_stream_id transport_stream_id; t_original_network_id original_network_id; int frequency; @@ -170,7 +171,7 @@ class CServiceManager xmlDocPtr ScanXml(); bool LoadProviderMap(); - bool ReplaceProviderName(std::string &name, t_transport_stream_id tsid, t_original_network_id onid); + bool ReplaceProviderName(std::string &name, t_transport_stream_id tsid, t_original_network_id onid, t_satellite_position bcid); int GetFreeNumber(bool radio); int GetMaxNumber(bool radio); void FreeNumber(int number, bool radio); diff --git a/src/zapit/src/getservices.cpp b/src/zapit/src/getservices.cpp index 4ff8a7366..0bf17084b 100644 --- a/src/zapit/src/getservices.cpp +++ b/src/zapit/src/getservices.cpp @@ -1269,26 +1269,33 @@ bool CServiceManager::LoadProviderMap() replace_map.clear(); parser = parseXmlFile(PROVIDER_MAP_XML); if (parser != NULL) { - xmlNodePtr node = xmlDocGetRootElement(parser); - node = xmlChildrenNode(node); - while ((node = xmlGetNextOccurence(node, "TS")) != NULL) { - provider_replace replace; - replace.transport_stream_id = xmlGetNumericAttribute(node, "id", 16); - replace.original_network_id = xmlGetNumericAttribute(node, "on", 16); - replace.frequency = xmlGetNumericAttribute(node, "frq", 0); - - const char * name = xmlGetAttribute(node, "name"); - const char * newname = xmlGetAttribute(node, "newname"); - if(name) - replace.name = name; - if(newname) - replace.newname = newname; - - DBG("prov map: tsid %04x onid %04x freq %d name [%s] to [%s]\n", - replace.transport_stream_id, replace.original_network_id, - replace.frequency, replace.name.c_str(), replace.newname.c_str()); - replace_map.push_back(replace); - node = xmlNextNode(node); + xmlNodePtr search = xmlDocGetRootElement(parser); + search = xmlChildrenNode(search); // + while (search) { + t_satellite_position bcid = xmlGetNumericAttribute(search, "bcID", 0); + xmlNodePtr node = xmlChildrenNode(search); + while ((node = xmlGetNextOccurence(node, "TS")) != NULL) { + provider_replace replace; + + replace.satellite_position = bcid; + replace.transport_stream_id = xmlGetNumericAttribute(node, "id", 16); + replace.original_network_id = xmlGetNumericAttribute(node, "on", 16); + replace.frequency = xmlGetNumericAttribute(node, "frq", 0); + + const char * name = xmlGetAttribute(node, "name"); + const char * newname = xmlGetAttribute(node, "newname"); + if(name) + replace.name = name; + if(newname) + replace.newname = newname; + + DBG("prov map: bcid %d tsid %04x onid %04x freq %d name [%s] to [%s]\n", + replace.satellite_position, replace.transport_stream_id, replace.original_network_id, + replace.frequency, replace.name.c_str(), replace.newname.c_str()); + replace_map.push_back(replace); + node = xmlNextNode(node); + } + search = xmlNextNode(search); } xmlFreeDoc(parser); return true; @@ -1296,39 +1303,42 @@ bool CServiceManager::LoadProviderMap() return false; } -bool CServiceManager::ReplaceProviderName(std::string &name, t_transport_stream_id tsid, t_original_network_id onid) +bool CServiceManager::ReplaceProviderName(std::string &name, t_transport_stream_id tsid, t_original_network_id onid, t_satellite_position bcid) { std::string newname; prov_replace_map_iterator_t it; for (it = replace_map.begin(); it != replace_map.end(); ++it) { provider_replace replace = *it; - /* if replace map has tsid and onid */ - if(replace.transport_stream_id && replace.original_network_id) { - /* compare tsid/onid */ - if(replace.transport_stream_id == tsid && replace.original_network_id == onid) { - /* if new name present, old name should be present */ + /* only matching Broadcaster (sat position, cable id) */ + if (replace.satellite_position==bcid) { + /* if replace map has tsid and onid */ + if(replace.transport_stream_id && replace.original_network_id) { + /* compare tsid/onid */ + if(replace.transport_stream_id == tsid && replace.original_network_id == onid) { + /* if new name present, old name should be present */ + if(!replace.newname.empty()) { + if (name == replace.name) + newname = replace.newname; + } else { + newname = replace.name; + } + } + } else { + /* no tsid/onid, only names. if new name present, old name should be present */ if(!replace.newname.empty()) { - if (name == replace.name) + if(name == replace.name) newname = replace.newname; - } else { - newname = replace.name; } + /* no tsid/onid, no newname, only name. compare name without case */ + else if(!strcasecmp(replace.name.c_str(), name.c_str())) + newname = replace.name; } - } else { - /* no tsid/onid, only names. if new name present, old name should be present */ - if(!replace.newname.empty()) { - if(name == replace.name) - newname = replace.newname; + if(!newname.empty()) { + DBG("ReplaceProviderName: old [%s] new [%s]\n", name.c_str(), newname.c_str()); + name = newname; + return true; } - /* no tsid/onid, no newname, only name. compare name without case */ - else if(!strcasecmp(replace.name.c_str(), name.c_str())) - newname = replace.name; - } - if(!newname.empty()) { - DBG("ReplaceProviderName: old [%s] new [%s]\n", name.c_str(), newname.c_str()); - name = newname; - return true; } } return false; diff --git a/src/zapit/src/scansdt.cpp b/src/zapit/src/scansdt.cpp index 64cb38027..37b8a860a 100644 --- a/src/zapit/src/scansdt.cpp +++ b/src/zapit/src/scansdt.cpp @@ -432,7 +432,7 @@ bool CSdt::ParseServiceDescriptor(ServiceDescription * service, ServiceDescripto providerName = lastProviderName; } else { FixWhiteSpaces(providerName); - CServiceManager::getInstance()->ReplaceProviderName(providerName, transport_stream_id, original_network_id); + CServiceManager::getInstance()->ReplaceProviderName(providerName, transport_stream_id, original_network_id, satellitePosition); lastProviderName = providerName; } -- 2.20.1