X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fdb.cpp;h=ffc62f6c2f1e68d655360028871e18b067b3c393;hp=110cedd8c3bc96ece8a4ea74fb3fc0dac3ce677d;hb=b1e8243644459d097aacaa79fc92c746da9d4fea;hpb=88a7819026f53420d5b973acfd2590e58b0c49aa diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 110cedd..ffc62f6 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -172,10 +172,10 @@ int eDVBService::checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQ switch (query.m_type) { case eDVBChannelQuery::tName: - res = m_service_name_sort.find(query.m_string) != std::string::npos; + res = m_service_name_sort == query.m_string; break; case eDVBChannelQuery::tProvider: - res = m_provider_name.find(query.m_string) != std::string::npos; + res = m_provider_name == query.m_string; break; case eDVBChannelQuery::tType: res = ref.getServiceType() == query.m_int; @@ -265,6 +265,42 @@ void eDVBDB::reloadServicelist() loadServicelist(CONFIGDIR"/enigma2/lamedb"); } +void eDVBDB::parseServiceData(ePtr s, std::string str) +{ + while ((!str.empty()) && str[1]==':') // new: p:, f:, c:%02d... + { + size_t c=str.find(','); + char p=str[0]; + std::string v; + if (c == std::string::npos) + { + v=str.substr(2); + str=""; + } else + { + v=str.substr(2, c-2); + str=str.substr(c+1); + } +// eDebug("%c ... %s", p, v.c_str()); + if (p == 'p') + s->m_provider_name=v; + else if (p == 'f') + { + sscanf(v.c_str(), "%x", &s->m_flags); + } else if (p == 'c') + { + int cid, val; + sscanf(v.c_str(), "%02d%x", &cid, &val); + s->setCacheEntry((eDVBService::cacheID)cid,val); + } else if (p == 'C') + { + int val; + sscanf(v.c_str(), "%04x", &val); + s->m_ca.push_front((uint16_t)val); + } + } +} + /* THIS CODE IS BAD. it should be replaced by somethine better. */ void eDVBDB::loadServicelist(const char *file) { @@ -425,44 +461,10 @@ void eDVBDB::loadServicelist(const char *file) fgets(line, 256, f); if (strlen(line)) line[strlen(line)-1]=0; - std::string str=line; - - if (str[1]!=':') // old ... (only service_provider) - { + if (line[1]!=':') // old ... (only service_provider) s->m_provider_name=line; - } else - while ((!str.empty()) && str[1]==':') // new: p:, f:, c:%02d... - { - size_t c=str.find(','); - char p=str[0]; - std::string v; - if (c == std::string::npos) - { - v=str.substr(2); - str=""; - } else - { - v=str.substr(2, c-2); - str=str.substr(c+1); - } -// eDebug("%c ... %s", p, v.c_str()); - if (p == 'p') - s->m_provider_name=v; - else if (p == 'f') - { - sscanf(v.c_str(), "%x", &s->m_flags); - } else if (p == 'c') - { - int cid, val; - sscanf(v.c_str(), "%02d%x", &cid, &val); - s->setCacheEntry((eDVBService::cacheID)cid,val); - } else if (p == 'C') - { - int val; - sscanf(v.c_str(), "%04x", &val); - s->m_ca.push_front((uint16_t)val); - } - } + else + parseServiceData(s, line); addService(ref, s); } @@ -839,7 +841,7 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje PyDict_SetItem(tp_dict, sat_pos, tplist); for (ElementConstIterator it(sat_elements.begin()); it != sat_elements.end(); ++it) { -// eDebug("\telement: %s", (*it)->name().c_str()); + //eDebug("\telement: %s", (*it)->name().c_str()); const AttributeList &tp_attributes = (*it)->getAttributeList(); AttributeConstIterator end = tp_attributes.end(); modulation = eDVBFrontendParametersSatellite::Modulation_QPSK; @@ -856,8 +858,8 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it) { - //eDebug("\t\tattr: %s", at->name().c_str()); at = *it; + //eDebug("\t\tattr: %s", at->name().c_str()); name = at->name(); if (name == "modulation") dest = &modulation; else if (name == "system") dest = &system; @@ -870,8 +872,10 @@ PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObje else if (name == "pilot") dest = &pilot; else if (name == "tsid") dest = &tsid; else if (name == "onid") dest = &onid; + else continue; if (dest) { + //eDebug("\t\t\tvalue: %s", at->value().c_str()); tmp = strtol(at->value().c_str(), &end_ptr, 10); if (!*end_ptr) *dest = tmp; @@ -995,6 +999,7 @@ PyObject *eDVBDB::readCables(ePyObject cab_list, ePyObject tp_dict) else if (name == "frequency") dest = &freq; else if (name == "symbol_rate") dest = &sr; else if (name == "fec_inner") dest = &fec; + else continue; if (dest) { tmp = strtol(at->value().c_str(), &end_ptr, 10); @@ -1118,6 +1123,7 @@ PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict) else if (name == "transmission_mode") dest = &transm; else if (name == "hierarchy_information") dest = &hierarchy; else if (name == "inversion") dest = &inv; + else continue; if (dest) { tmp = strtol(at->value().c_str(), &end_ptr, 10); @@ -1373,7 +1379,7 @@ RESULT eDVBDB::addChannelToList(const eDVBChannelID &id, iDVBFrontendParameters { channel ch; std::map::iterator it = m_channels.find(id); - assert(feparm); + ASSERT(feparm); ch.m_frontendParameters = feparm; if (it != m_channels.end()) it->second = ch;