mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-09-02 18:31:12 +02:00
getservices and scan: testing provider name replace
Origin commit data
------------------
Commit: 5914752256
Author: [CST] Focus <focus.cst@gmail.com>
Date: 2012-01-19 (Thu, 19 Jan 2012)
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
#include <zapit/satconfig.h>
|
||||
|
||||
#include <map>
|
||||
#include <list>
|
||||
#define zapped_chan_is_nvod 0x80
|
||||
|
||||
struct transponder
|
||||
@@ -83,6 +84,18 @@ typedef channel_map_t::iterator channel_map_iterator_t;
|
||||
typedef std::pair<t_channel_id, CZapitChannel> channel_pair_t;
|
||||
typedef std::pair<channel_map_iterator_t,bool> channel_insert_res_t;
|
||||
|
||||
struct provider_replace
|
||||
{
|
||||
t_transport_stream_id transport_stream_id;
|
||||
t_original_network_id original_network_id;
|
||||
int frequency;
|
||||
std::string name;
|
||||
std::string newname;
|
||||
};
|
||||
|
||||
typedef std::list<provider_replace> prov_replace_map_t;
|
||||
typedef prov_replace_map_t::iterator prov_replace_map_iterator_t;
|
||||
|
||||
class CServiceManager
|
||||
{
|
||||
private:
|
||||
@@ -167,5 +180,9 @@ class CServiceManager
|
||||
}
|
||||
satellite_map_t & SatelliteList() { return satellitePositions; }
|
||||
xmlDocPtr ScanXml();
|
||||
|
||||
prov_replace_map_t replace_map;
|
||||
bool LoadProviderMap();
|
||||
bool ReplaceProviderName(std::string &name, t_transport_stream_id tsid, t_original_network_id onid);
|
||||
};
|
||||
#endif /* __getservices_h__ */
|
||||
|
@@ -629,6 +629,7 @@ bool CServiceManager::LoadServices(bool only_current)
|
||||
//FIXME copy, until global satellitePositions removed
|
||||
//satelliteList = satellitePositions;
|
||||
|
||||
LoadProviderMap();
|
||||
printf("[zapit] %d services loaded (%d)...\n", service_count, allchans.size());
|
||||
TIMER_STOP("[zapit] service loading took");
|
||||
|
||||
@@ -917,3 +918,74 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid)
|
||||
|
||||
return updated;
|
||||
}
|
||||
|
||||
#define PROVIDER_MAP_XML CONFIGDIR "/zapit/providermap.xml"
|
||||
bool CServiceManager::LoadProviderMap()
|
||||
{
|
||||
xmlDocPtr parser;
|
||||
|
||||
replace_map.clear();
|
||||
parser = parseXmlFile(PROVIDER_MAP_XML);
|
||||
if (parser != NULL) {
|
||||
xmlNodePtr node = xmlDocGetRootElement(parser)->xmlChildrenNode;
|
||||
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);
|
||||
|
||||
char * n = xmlGetAttribute(node, "name");
|
||||
char * tn = xmlGetAttribute(node, "newname");
|
||||
if(n)
|
||||
replace.name = n;
|
||||
if(tn)
|
||||
replace.newname = tn;
|
||||
|
||||
printf("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 = node->xmlNextNode;
|
||||
}
|
||||
xmlFreeDoc(parser);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CServiceManager::ReplaceProviderName(std::string &name, t_transport_stream_id tsid, t_original_network_id onid)
|
||||
{
|
||||
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 */
|
||||
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)
|
||||
newname = replace.newname;
|
||||
}
|
||||
/* 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()) {
|
||||
printf("ReplaceProviderName: old [%s] new [%s]\n", name.c_str(), newname.c_str());
|
||||
name = newname;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@@ -284,6 +284,7 @@ bool CSdt::ParseServiceDescriptor(ServiceDescription * service, ServiceDescripto
|
||||
providerName = lastProviderName;
|
||||
} else {
|
||||
FixWhiteSpaces(providerName);
|
||||
CServiceManager::getInstance()->ReplaceProviderName(providerName, transport_stream_id, original_network_id);
|
||||
lastProviderName = providerName;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user