diff options
| author | Fraxinas <andreas.frisch@multimedia-labs.de> | 2009-04-23 13:24:13 +0200 |
|---|---|---|
| committer | Fraxinas <andreas.frisch@multimedia-labs.de> | 2009-04-23 13:24:13 +0200 |
| commit | e21cff679bb73bce310e877d5219ec29291dbe10 (patch) | |
| tree | ca5ef1a2c77b6b588ebff4bb479f3485dd44529c /lib/dvb | |
| parent | 6ae5d719b93de2e8897a660ac61b0e9c5a190dde (diff) | |
| parent | 4b7061b946278825a03d7dd07a65056c3f4e1373 (diff) | |
| download | enigma2-e21cff679bb73bce310e877d5219ec29291dbe10.tar.gz enigma2-e21cff679bb73bce310e877d5219ec29291dbe10.zip | |
Merge branch 'master' of fraxinas@git.opendreambox.org:/git/enigma2
Diffstat (limited to 'lib/dvb')
| -rw-r--r-- | lib/dvb/db.cpp | 76 | ||||
| -rw-r--r-- | lib/dvb/db.h | 1 | ||||
| -rw-r--r-- | lib/dvb/metaparser.cpp | 5 | ||||
| -rw-r--r-- | lib/dvb/metaparser.h | 11 |
4 files changed, 47 insertions, 46 deletions
diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 647afad4..ae30e360 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -265,6 +265,42 @@ void eDVBDB::reloadServicelist() loadServicelist(CONFIGDIR"/enigma2/lamedb"); } +void eDVBDB::parseServiceData(ePtr<eDVBService> 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); } diff --git a/lib/dvb/db.h b/lib/dvb/db.h index 11fb1ab1..098ee03e 100644 --- a/lib/dvb/db.h +++ b/lib/dvb/db.h @@ -70,6 +70,7 @@ public: void saveServicelist(); void saveServicelist(const char *file); void reloadBouquets(); + void parseServiceData(ePtr<eDVBService> s, std::string str); }; #ifndef SWIG diff --git a/lib/dvb/metaparser.cpp b/lib/dvb/metaparser.cpp index 175c7cdb..24a5ab67 100644 --- a/lib/dvb/metaparser.cpp +++ b/lib/dvb/metaparser.cpp @@ -67,6 +67,9 @@ int eDVBMetaParser::parseMeta(const std::string &tsname) case 6: m_filesize = atoll(line); break; + case 7: + m_service_data = line; + break; default: break; } @@ -145,7 +148,7 @@ int eDVBMetaParser::updateMeta(const std::string &tsname) FILE *f = fopen(filename.c_str(), "w"); if (!f) return -ENOENT; - fprintf(f, "%s\n%s\n%s\n%d\n%s\n%d\n%lld\n", ref.toString().c_str(), m_name.c_str(), m_description.c_str(), m_time_create, m_tags.c_str(), m_length, m_filesize ); + fprintf(f, "%s\n%s\n%s\n%d\n%s\n%d\n%lld\n%s\n", ref.toString().c_str(), m_name.c_str(), m_description.c_str(), m_time_create, m_tags.c_str(), m_length, m_filesize, m_service_data.c_str() ); fclose(f); return 0; } diff --git a/lib/dvb/metaparser.h b/lib/dvb/metaparser.h index 2ca94d6d..38534d8f 100644 --- a/lib/dvb/metaparser.h +++ b/lib/dvb/metaparser.h @@ -9,19 +9,14 @@ class eDVBMetaParser public: eDVBMetaParser(); int parseFile(const std::string &basename); - int parseMeta(const std::string &filename); int parseRecordings(const std::string &filename); int updateMeta(const std::string &basename); - - int m_data_ok; - + eServiceReferenceDVB m_ref; - std::string m_name, m_description; - int m_time_create, m_length; + int m_data_ok, m_time_create, m_length; + std::string m_name, m_description, m_tags, m_service_data; long long m_filesize; - - std::string m_tags; }; #endif |
