mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-09-02 02:11:11 +02:00
zapit/src/getservices.cpp: reduce variables scope, mark services changed on add/remove
This commit is contained in:
@@ -193,5 +193,6 @@ class CServiceManager
|
|||||||
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);
|
||||||
int GetFreeNumber(bool radio);
|
int GetFreeNumber(bool radio);
|
||||||
int GetMaxNumber(bool radio);
|
int GetMaxNumber(bool radio);
|
||||||
|
void SetServiceChanged(bool changed) { services_changed = changed; }
|
||||||
};
|
};
|
||||||
#endif /* __getservices_h__ */
|
#endif /* __getservices_h__ */
|
||||||
|
@@ -32,12 +32,8 @@
|
|||||||
//#define SAVE_DEBUG
|
//#define SAVE_DEBUG
|
||||||
|
|
||||||
extern transponder_list_t transponders;
|
extern transponder_list_t transponders;
|
||||||
|
|
||||||
//satellite_map_t satellitePositions;
|
|
||||||
std::map<transponder_id_t, transponder> select_transponders;
|
std::map<transponder_id_t, transponder> select_transponders;
|
||||||
|
|
||||||
extern int zapit_debug;
|
|
||||||
|
|
||||||
CServiceManager * CServiceManager::manager = NULL;
|
CServiceManager * CServiceManager::manager = NULL;
|
||||||
|
|
||||||
CServiceManager::CServiceManager()
|
CServiceManager::CServiceManager()
|
||||||
@@ -96,6 +92,8 @@ bool CServiceManager::AddChannel(CZapitChannel * &channel)
|
|||||||
channel_pair_t (channel->getChannelID(), *channel));
|
channel_pair_t (channel->getChannelID(), *channel));
|
||||||
delete channel;
|
delete channel;
|
||||||
channel = &ret.first->second;
|
channel = &ret.first->second;
|
||||||
|
if(ret.second)
|
||||||
|
services_changed = true;
|
||||||
return ret.second;
|
return ret.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,6 +143,7 @@ void CServiceManager::ResetChannelNumbers()
|
|||||||
void CServiceManager::RemoveChannel(const t_channel_id channel_id)
|
void CServiceManager::RemoveChannel(const t_channel_id channel_id)
|
||||||
{
|
{
|
||||||
allchans.erase(channel_id);
|
allchans.erase(channel_id);
|
||||||
|
services_changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CServiceManager::RemoveAllChannels()
|
void CServiceManager::RemoveAllChannels()
|
||||||
@@ -270,19 +269,15 @@ std::string CServiceManager::GetServiceName(t_channel_id channel_id)
|
|||||||
|
|
||||||
void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, bool cable)
|
void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position satellitePosition, bool cable)
|
||||||
{
|
{
|
||||||
t_transport_stream_id transport_stream_id;
|
|
||||||
t_original_network_id original_network_id;
|
|
||||||
FrontendParameters feparams;
|
|
||||||
uint8_t polarization = 0;
|
uint8_t polarization = 0;
|
||||||
uint16_t freq;
|
uint16_t freq;
|
||||||
tp_count = 0;
|
|
||||||
|
|
||||||
memset(&feparams, 0, sizeof(FrontendParameters));
|
|
||||||
|
|
||||||
/* read all transponders */
|
/* read all transponders */
|
||||||
while ((node = xmlGetNextOccurence(node, "TS")) != NULL) {
|
while ((node = xmlGetNextOccurence(node, "TS")) != NULL) {
|
||||||
transport_stream_id = xmlGetNumericAttribute(node, "id", 16);
|
FrontendParameters feparams;
|
||||||
original_network_id = xmlGetNumericAttribute(node, "on", 16);
|
|
||||||
|
t_transport_stream_id transport_stream_id = xmlGetNumericAttribute(node, "id", 16);
|
||||||
|
t_original_network_id original_network_id = xmlGetNumericAttribute(node, "on", 16);
|
||||||
feparams.frequency = xmlGetNumericAttribute(node, "frq", 0);
|
feparams.frequency = xmlGetNumericAttribute(node, "frq", 0);
|
||||||
feparams.inversion = (fe_spectral_inversion) xmlGetNumericAttribute(node, "inv", 0);
|
feparams.inversion = (fe_spectral_inversion) xmlGetNumericAttribute(node, "inv", 0);
|
||||||
|
|
||||||
@@ -295,23 +290,22 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa
|
|||||||
feparams.frequency = feparams.frequency/1000; //transponderlist was read from tuxbox
|
feparams.frequency = feparams.frequency/1000; //transponderlist was read from tuxbox
|
||||||
|
|
||||||
//feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000);
|
//feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000);
|
||||||
|
freq = feparams.frequency/100;
|
||||||
} else {
|
} else {
|
||||||
feparams.u.qpsk.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0);
|
feparams.u.qpsk.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(node, "fec", 0);
|
||||||
feparams.u.qpsk.symbol_rate = xmlGetNumericAttribute(node, "sr", 0);
|
feparams.u.qpsk.symbol_rate = xmlGetNumericAttribute(node, "sr", 0);
|
||||||
|
|
||||||
polarization = xmlGetNumericAttribute(node, "pol", 0);
|
polarization = xmlGetNumericAttribute(node, "pol", 0);
|
||||||
|
|
||||||
if(feparams.u.qpsk.symbol_rate < 50000) feparams.u.qpsk.symbol_rate = feparams.u.qpsk.symbol_rate * 1000;
|
if(feparams.u.qpsk.symbol_rate < 50000)
|
||||||
|
feparams.u.qpsk.symbol_rate = feparams.u.qpsk.symbol_rate * 1000;
|
||||||
|
|
||||||
if(feparams.frequency < 20000)
|
if(feparams.frequency < 20000)
|
||||||
feparams.frequency = feparams.frequency*1000;
|
feparams.frequency = feparams.frequency*1000;
|
||||||
else
|
else
|
||||||
feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000);
|
feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000);
|
||||||
}
|
|
||||||
if(cable)
|
|
||||||
freq = feparams.frequency/100;
|
|
||||||
else
|
|
||||||
freq = feparams.frequency/1000;
|
freq = feparams.frequency/1000;
|
||||||
|
}
|
||||||
|
|
||||||
transponder_id_t tid = CREATE_TRANSPONDER_ID_FROM_SATELLITEPOSITION_ORIGINALNETWORK_TRANSPORTSTREAM_ID(freq, satellitePosition,original_network_id,transport_stream_id);
|
transponder_id_t tid = CREATE_TRANSPONDER_ID_FROM_SATELLITEPOSITION_ORIGINALNETWORK_TRANSPORTSTREAM_ID(freq, satellitePosition,original_network_id,transport_stream_id);
|
||||||
pair<map<transponder_id_t, transponder>::iterator,bool> ret;
|
pair<map<transponder_id_t, transponder>::iterator,bool> ret;
|
||||||
@@ -336,17 +330,8 @@ void CServiceManager::ParseTransponders(xmlNodePtr node, t_satellite_position sa
|
|||||||
|
|
||||||
void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization)
|
void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq, uint8_t polarization)
|
||||||
{
|
{
|
||||||
t_service_id service_id;
|
|
||||||
std::string name;
|
|
||||||
uint8_t service_type;
|
|
||||||
unsigned short vpid, apid, pcrpid, pmtpid, txpid, vtype, scrambled;
|
|
||||||
int number;
|
|
||||||
std::string desc = "";
|
|
||||||
desc += "Preset";
|
|
||||||
t_channel_id chid;
|
|
||||||
int dummy;
|
int dummy;
|
||||||
int * have_ptr = &dummy;
|
int * have_ptr = &dummy;
|
||||||
service_number_map_t * channel_numbers;
|
|
||||||
|
|
||||||
sat_iterator_t sit = satellitePositions.find(satellitePosition);
|
sat_iterator_t sit = satellitePositions.find(satellitePosition);
|
||||||
if(sit != satellitePositions.end())
|
if(sit != satellitePositions.end())
|
||||||
@@ -354,21 +339,21 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id
|
|||||||
|
|
||||||
while ((node = xmlGetNextOccurence(node, "S")) != NULL) {
|
while ((node = xmlGetNextOccurence(node, "S")) != NULL) {
|
||||||
*have_ptr = 1;
|
*have_ptr = 1;
|
||||||
service_id = xmlGetNumericAttribute(node, "i", 16);
|
t_service_id service_id = xmlGetNumericAttribute(node, "i", 16);
|
||||||
name = xmlGetAttribute(node, "n");
|
std::string name = xmlGetAttribute(node, "n");
|
||||||
service_type = xmlGetNumericAttribute(node, "t", 16);
|
uint8_t service_type = xmlGetNumericAttribute(node, "t", 16);
|
||||||
vpid = xmlGetNumericAttribute(node, "v", 16);
|
uint16_t vpid = xmlGetNumericAttribute(node, "v", 16);
|
||||||
apid = xmlGetNumericAttribute(node, "a", 16);
|
uint16_t apid = xmlGetNumericAttribute(node, "a", 16);
|
||||||
pcrpid = xmlGetNumericAttribute(node, "p", 16);
|
uint16_t pcrpid = xmlGetNumericAttribute(node, "p", 16);
|
||||||
pmtpid = xmlGetNumericAttribute(node, "pmt", 16);
|
uint16_t pmtpid = xmlGetNumericAttribute(node, "pmt", 16);
|
||||||
txpid = xmlGetNumericAttribute(node, "tx", 16);
|
uint16_t txpid = xmlGetNumericAttribute(node, "tx", 16);
|
||||||
vtype = xmlGetNumericAttribute(node, "vt", 16);
|
uint16_t vtype = xmlGetNumericAttribute(node, "vt", 16);
|
||||||
scrambled = xmlGetNumericAttribute(node, "s", 16);
|
uint16_t scrambled = xmlGetNumericAttribute(node, "s", 16);
|
||||||
number = xmlGetNumericAttribute(node, "num", 10);
|
int number = xmlGetNumericAttribute(node, "num", 10);
|
||||||
|
|
||||||
channel_numbers = (service_type == ST_DIGITAL_RADIO_SOUND_SERVICE) ? &radio_numbers : &tv_numbers;
|
service_number_map_t * channel_numbers = (service_type == ST_DIGITAL_RADIO_SOUND_SERVICE) ? &radio_numbers : &tv_numbers;
|
||||||
|
|
||||||
chid = CREATE_CHANNEL_ID64;
|
t_channel_id chid = CREATE_CHANNEL_ID64;
|
||||||
char *ptr = xmlGetAttribute(node, "action");
|
char *ptr = xmlGetAttribute(node, "action");
|
||||||
bool remove = ptr ? (!strcmp(ptr, "remove") || !strcmp(ptr, "replace")) : false;
|
bool remove = ptr ? (!strcmp(ptr, "remove") || !strcmp(ptr, "replace")) : false;
|
||||||
bool add = ptr ? (!strcmp(ptr, "add") || !strcmp(ptr, "replace")) : true;
|
bool add = ptr ? (!strcmp(ptr, "add") || !strcmp(ptr, "replace")) : true;
|
||||||
@@ -385,12 +370,8 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id
|
|||||||
if(pidmap)
|
if(pidmap)
|
||||||
apid = pidmap->apid;
|
apid = pidmap->apid;
|
||||||
|
|
||||||
CZapitChannel * channel = new CZapitChannel ( name, service_id,
|
CZapitChannel * channel = new CZapitChannel(name, chid, service_type,
|
||||||
transport_stream_id,
|
satellitePosition, freq);
|
||||||
original_network_id,
|
|
||||||
service_type,
|
|
||||||
satellitePosition,
|
|
||||||
freq);
|
|
||||||
|
|
||||||
if(number) {
|
if(number) {
|
||||||
have_numbers = true;
|
have_numbers = true;
|
||||||
@@ -432,7 +413,6 @@ void CServiceManager::ParseChannels(xmlNodePtr node, const t_transport_stream_id
|
|||||||
|
|
||||||
void CServiceManager::FindTransponder(xmlNodePtr search)
|
void CServiceManager::FindTransponder(xmlNodePtr search)
|
||||||
{
|
{
|
||||||
t_satellite_position satellitePosition = 0;
|
|
||||||
while (search) {
|
while (search) {
|
||||||
bool cable = false;
|
bool cable = false;
|
||||||
|
|
||||||
@@ -443,7 +423,7 @@ void CServiceManager::FindTransponder(xmlNodePtr search)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10);
|
t_satellite_position satellitePosition = xmlGetSignedNumericAttribute(search, "position", 10);
|
||||||
DBG("going to parse dvb-%c provider %s\n", xmlGetName(search)[0], xmlGetAttribute(search, "name"));
|
DBG("going to parse dvb-%c provider %s\n", xmlGetName(search)[0], xmlGetAttribute(search, "name"));
|
||||||
ParseTransponders(search->xmlChildrenNode, satellitePosition, cable);
|
ParseTransponders(search->xmlChildrenNode, satellitePosition, cable);
|
||||||
newfound++;
|
newfound++;
|
||||||
@@ -454,8 +434,6 @@ void CServiceManager::FindTransponder(xmlNodePtr search)
|
|||||||
void CServiceManager::ParseSatTransponders(fe_type_t fType, xmlNodePtr search, t_satellite_position satellitePosition)
|
void CServiceManager::ParseSatTransponders(fe_type_t fType, xmlNodePtr search, t_satellite_position satellitePosition)
|
||||||
{
|
{
|
||||||
uint8_t polarization = 0;
|
uint8_t polarization = 0;
|
||||||
uint8_t system = 0, modulation = 1;
|
|
||||||
int xml_fec;
|
|
||||||
FrontendParameters feparams;
|
FrontendParameters feparams;
|
||||||
|
|
||||||
fake_tid = fake_nid = 0;
|
fake_tid = fake_nid = 0;
|
||||||
@@ -468,16 +446,6 @@ void CServiceManager::ParseSatTransponders(fe_type_t fType, xmlNodePtr search, t
|
|||||||
feparams.frequency = xmlGetNumericAttribute(tps, "frequency", 0);
|
feparams.frequency = xmlGetNumericAttribute(tps, "frequency", 0);
|
||||||
|
|
||||||
freq_id_t freq;
|
freq_id_t freq;
|
||||||
if (fType == FE_QAM) {
|
|
||||||
if (feparams.frequency > 1000*1000)
|
|
||||||
feparams.frequency=feparams.frequency/1000; //transponderlist was read from tuxbox
|
|
||||||
//feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000);
|
|
||||||
freq = feparams.frequency/100;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000);
|
|
||||||
freq = feparams.frequency/1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
feparams.inversion = INVERSION_AUTO;
|
feparams.inversion = INVERSION_AUTO;
|
||||||
|
|
||||||
@@ -485,17 +453,23 @@ void CServiceManager::ParseSatTransponders(fe_type_t fType, xmlNodePtr search, t
|
|||||||
feparams.u.qam.symbol_rate = xmlGetNumericAttribute(tps, "symbol_rate", 0);
|
feparams.u.qam.symbol_rate = xmlGetNumericAttribute(tps, "symbol_rate", 0);
|
||||||
feparams.u.qam.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(tps, "fec_inner", 0);
|
feparams.u.qam.fec_inner = (fe_code_rate_t) xmlGetNumericAttribute(tps, "fec_inner", 0);
|
||||||
feparams.u.qam.modulation = (fe_modulation_t) xmlGetNumericAttribute(tps, "modulation", 0);
|
feparams.u.qam.modulation = (fe_modulation_t) xmlGetNumericAttribute(tps, "modulation", 0);
|
||||||
|
if (feparams.frequency > 1000*1000)
|
||||||
|
feparams.frequency=feparams.frequency/1000; //transponderlist was read from tuxbox
|
||||||
|
//feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000);
|
||||||
|
freq = feparams.frequency/100;
|
||||||
}
|
}
|
||||||
else if (fType == FE_QPSK) {
|
else if (fType == FE_QPSK) {
|
||||||
feparams.u.qpsk.symbol_rate = xmlGetNumericAttribute(tps, "symbol_rate", 0);
|
feparams.u.qpsk.symbol_rate = xmlGetNumericAttribute(tps, "symbol_rate", 0);
|
||||||
polarization = xmlGetNumericAttribute(tps, "polarization", 0);
|
polarization = xmlGetNumericAttribute(tps, "polarization", 0);
|
||||||
system = xmlGetNumericAttribute(tps, "system", 0);
|
uint8_t system = xmlGetNumericAttribute(tps, "system", 0);
|
||||||
modulation = xmlGetNumericAttribute(tps, "modulation", 0);
|
uint8_t modulation = xmlGetNumericAttribute(tps, "modulation", 0);
|
||||||
xml_fec = xmlGetNumericAttribute(tps, "fec_inner", 0);
|
int xml_fec = xmlGetNumericAttribute(tps, "fec_inner", 0);
|
||||||
xml_fec = CFrontend::getCodeRate(xml_fec, system);
|
xml_fec = CFrontend::getCodeRate(xml_fec, system);
|
||||||
if(modulation == 2)
|
if(modulation == 2)
|
||||||
xml_fec += 9;
|
xml_fec += 9;
|
||||||
feparams.u.qpsk.fec_inner = (fe_code_rate_t) xml_fec;
|
feparams.u.qpsk.fec_inner = (fe_code_rate_t) xml_fec;
|
||||||
|
feparams.frequency = (int) 1000 * (int) round ((double) feparams.frequency / (double) 1000);
|
||||||
|
freq = feparams.frequency/1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
transponder_id_t tid =
|
transponder_id_t tid =
|
||||||
@@ -609,7 +583,6 @@ bool CServiceManager::LoadServices(bool only_current)
|
|||||||
if(only_current)
|
if(only_current)
|
||||||
goto do_current;
|
goto do_current;
|
||||||
|
|
||||||
|
|
||||||
TIMER_START();
|
TIMER_START();
|
||||||
allchans.clear();
|
allchans.clear();
|
||||||
transponders.clear();
|
transponders.clear();
|
||||||
@@ -624,7 +597,6 @@ bool CServiceManager::LoadServices(bool only_current)
|
|||||||
t_satellite_position position = 0;
|
t_satellite_position position = 0;
|
||||||
if(!satcleared) {
|
if(!satcleared) {
|
||||||
satellitePositions.clear();
|
satellitePositions.clear();
|
||||||
//satelliteList.clear();
|
|
||||||
}
|
}
|
||||||
satcleared = 1;
|
satcleared = 1;
|
||||||
|
|
||||||
@@ -673,6 +645,8 @@ bool CServiceManager::LoadServices(bool only_current)
|
|||||||
for(sit = satellitePositions.begin(); sit != satellitePositions.end(); ++sit)
|
for(sit = satellitePositions.begin(); sit != satellitePositions.end(); ++sit)
|
||||||
printf("satelliteName = %s (%d), satellitePosition = %d motor position = %d usals %d\n", sit->second.name.c_str(), sit->second.name.size(), sit->first, sit->second.motor_position, sit->second.use_usals);
|
printf("satelliteName = %s (%d), satellitePosition = %d motor position = %d usals %d\n", sit->second.name.c_str(), sit->second.name.size(), sit->first, sit->second.motor_position, sit->second.use_usals);
|
||||||
}
|
}
|
||||||
|
/* reset flag after loading services.xml */
|
||||||
|
services_changed = false;
|
||||||
do_current:
|
do_current:
|
||||||
DBG("Loading current..\n");
|
DBG("Loading current..\n");
|
||||||
if (CZapit::getInstance()->scanSDT() && (parser = parseXmlFile(CURRENTSERVICES_XML))) {
|
if (CZapit::getInstance()->scanSDT() && (parser = parseXmlFile(CURRENTSERVICES_XML))) {
|
||||||
@@ -694,6 +668,7 @@ do_current:
|
|||||||
xmlFreeDoc(parser);
|
xmlFreeDoc(parser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* if no numbers, zapit will save after loading bouquets, with numbers */
|
||||||
if(!have_numbers)
|
if(!have_numbers)
|
||||||
services_changed = true;
|
services_changed = true;
|
||||||
|
|
||||||
@@ -833,6 +808,7 @@ void CServiceManager::SaveServices(bool tocopy, bool if_changed)
|
|||||||
chans_processed.clear();
|
chans_processed.clear();
|
||||||
#endif
|
#endif
|
||||||
printf("CServiceManager::SaveServices: processed channels: %d\n", processed);
|
printf("CServiceManager::SaveServices: processed channels: %d\n", processed);
|
||||||
|
services_changed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* helper for reused code */
|
/* helper for reused code */
|
||||||
|
Reference in New Issue
Block a user