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 <zapit/satconfig.h>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <list>
|
||||||
#define zapped_chan_is_nvod 0x80
|
#define zapped_chan_is_nvod 0x80
|
||||||
|
|
||||||
struct transponder
|
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<t_channel_id, CZapitChannel> channel_pair_t;
|
||||||
typedef std::pair<channel_map_iterator_t,bool> channel_insert_res_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
|
class CServiceManager
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
@@ -167,5 +180,9 @@ class CServiceManager
|
|||||||
}
|
}
|
||||||
satellite_map_t & SatelliteList() { return satellitePositions; }
|
satellite_map_t & SatelliteList() { return satellitePositions; }
|
||||||
xmlDocPtr ScanXml();
|
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__ */
|
#endif /* __getservices_h__ */
|
||||||
|
@@ -629,6 +629,7 @@ bool CServiceManager::LoadServices(bool only_current)
|
|||||||
//FIXME copy, until global satellitePositions removed
|
//FIXME copy, until global satellitePositions removed
|
||||||
//satelliteList = satellitePositions;
|
//satelliteList = satellitePositions;
|
||||||
|
|
||||||
|
LoadProviderMap();
|
||||||
printf("[zapit] %d services loaded (%d)...\n", service_count, allchans.size());
|
printf("[zapit] %d services loaded (%d)...\n", service_count, allchans.size());
|
||||||
TIMER_STOP("[zapit] service loading took");
|
TIMER_STOP("[zapit] service loading took");
|
||||||
|
|
||||||
@@ -917,3 +918,74 @@ bool CServiceManager::SaveCurrentServices(transponder_id_t tpid)
|
|||||||
|
|
||||||
return updated;
|
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;
|
providerName = lastProviderName;
|
||||||
} else {
|
} else {
|
||||||
FixWhiteSpaces(providerName);
|
FixWhiteSpaces(providerName);
|
||||||
|
CServiceManager::getInstance()->ReplaceProviderName(providerName, transport_stream_id, original_network_id);
|
||||||
lastProviderName = providerName;
|
lastProviderName = providerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user