From a3bbc85871508cbf24edea513a5f69a14ee76e33 Mon Sep 17 00:00:00 2001 From: Andreas Monzner Date: Sun, 7 Jan 2007 13:03:31 +0000 Subject: [PATCH] disable dvb type filtering by default for bouquets but its possible to add a filtering in bouquet.tv or bouquets.radio code cleanup --- lib/dvb/db.cpp | 55 ++++++++++++-------------- lib/python/Screens/ChannelSelection.py | 18 ++------- lib/python/Screens/InfoBarGenerics.py | 2 +- 3 files changed, 31 insertions(+), 44 deletions(-) diff --git a/lib/dvb/db.cpp b/lib/dvb/db.cpp index 31b70882..6b6aa033 100644 --- a/lib/dvb/db.cpp +++ b/lib/dvb/db.cpp @@ -81,24 +81,6 @@ RESULT eBouquet::flushChanges() { eServiceReference tmp = *i; std::string str = tmp.path; - if ( i->flags&eServiceReference::canDescent ) - { - unsigned int p1 = str.find("FROM BOUQUET \""); - if (p1 == std::string::npos) - { - eDebug("doof... kaputt"); - continue; - } - str.erase(0, p1+14); - p1 = str.find("\""); - if (p1 == std::string::npos) - { - eDebug("doof2... kaputt"); - continue; - } - str.erase(p1); - tmp.path=str; - } if ( fprintf(f, "#SERVICE %s\r\n", tmp.toString().c_str()) < 0 ) goto err; if ( i->name.length() ) @@ -645,17 +627,35 @@ void eDVBDB::loadBouquet(const char *path) if ( tmp.flags&eServiceReference::canDescent ) { unsigned int pos = tmp.path.rfind('/'); + char buf[256]; + std::string path = tmp.path; if ( pos != std::string::npos ) - tmp.path.erase(0, pos+1); - if (tmp.path.empty()) + path.erase(0, pos+1); + if (path.empty()) { eDebug("Bouquet load failed.. no filename given.."); continue; } - loadBouquet(tmp.path.c_str()); - char buf[256]; - snprintf(buf, 256, "(type == %d) FROM BOUQUET \"%s\" ORDER BY bouquet", tmp.data[0], tmp.path.c_str()); - tmp.path = buf; + pos = path.find("FROM BOUQUET "); + if (pos != std::string::npos) + { + char endchr = path[pos+13]; + if (endchr != '"') + { + eDebug("ignore invalid bouquet '%s' (only \" are allowed)", + tmp.toString().c_str()); + continue; + } + char *beg = &path[pos+14]; + char *end = strchr(beg, endchr); + path.assign(beg, end - beg); + } + else + { + snprintf(buf, 256, "FROM BOUQUET \"%s\" ORDER BY bouquet", path.c_str()); + tmp.path = buf; + } + loadBouquet(path.c_str()); } list.push_back(tmp); e = &list.back(); @@ -693,7 +693,7 @@ void eDVBDB::reloadBouquets() ref.type=1; ref.flags=7; ref.data[0]=1; - ref.path="(type == 1) FROM BOUQUET \"userbouquet.favourites.tv\" ORDER BY bouquet"; + ref.path="FROM BOUQUET \"userbouquet.favourites.tv\" ORDER BY bouquet"; eBouquet &parent = m_bouquets["bouquets.tv"]; parent.m_services.push_back(ref); parent.flushChanges(); @@ -709,7 +709,7 @@ void eDVBDB::reloadBouquets() ref.type=1; ref.flags=7; ref.data[0]=2; - ref.path="(type == 2) FROM BOUQUET \"userbouquet.favourites.radio\" ORDER BY bouquet"; + ref.path="FROM BOUQUET \"userbouquet.favourites.radio\" ORDER BY bouquet"; eBouquet &parent = m_bouquets["bouquets.radio"]; parent.m_services.push_back(ref); parent.flushChanges(); @@ -1262,10 +1262,7 @@ RESULT parseExpression(ePtr &res, std::list::cons std::list::const_iterator end_of_exp; if (begin == end) - { - eDebug("empty expression!"); return 0; - } if (*begin == "(") { diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index e2dbd6b5..aa1233e3 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -650,17 +650,9 @@ class ChannelSelectionBase(Screen): }) self.recallBouquetMode() - def appendDVBTypes(self, ref): - path = ref.getPath() - pos = path.find(' FROM BOUQUET') - if pos != -1: - return eServiceReference(self.service_types + path[pos:]) - return ref - def getBouquetNumOffset(self, bouquet): if not config.usage.multibouquet.value: return 0 - bouquet = self.appendDVBTypes(bouquet) str = bouquet.toString() offsetCount = 0 if not self.bouquetNumOffsetCache.has_key(str): @@ -668,7 +660,7 @@ class ChannelSelectionBase(Screen): bouquetlist = serviceHandler.list(self.bouquet_root) if not bouquetlist is None: while True: - bouquetIterator = self.appendDVBTypes(bouquetlist.getNext()) + bouquetIterator = bouquetlist.getNext() if not bouquetIterator.valid(): #end of list break self.bouquetNumOffsetCache[bouquetIterator.toString()]=offsetCount @@ -689,13 +681,13 @@ class ChannelSelectionBase(Screen): if self.mode == MODE_TV: self.service_types = service_types_tv if config.usage.multibouquet.value: - self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET "bouquets.tv" ORDER BY bouquet' + self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet' else: self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet'%(self.service_types) else: self.service_types = service_types_radio if config.usage.multibouquet.value: - self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET "bouquets.radio" ORDER BY bouquet' + self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet' else: self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.radio" ORDER BY bouquet'%(self.service_types) self.bouquet_root = eServiceReference(self.bouquet_rootstr) @@ -725,13 +717,11 @@ class ChannelSelectionBase(Screen): def setRoot(self, root, justSet=False): path = root.getPath() inBouquetRootList = path.find('FROM BOUQUET "bouquets.') != -1 #FIXME HACK - pos = path.find(' FROM BOUQUET') + pos = path.find('FROM BOUQUET') isBouquet = (pos != -1) and (root.flags & eServiceReference.isDirectory) if not inBouquetRootList and isBouquet: self.servicelist.setMode(ServiceList.MODE_FAVOURITES) self.servicelist.setNumberOffset(self.getBouquetNumOffset(root)) - refstr = self.service_types + path[pos:] - root = eServiceReference(refstr) else: self.servicelist.setMode(ServiceList.MODE_NORMAL) self.servicelist.setRoot(root, justSet) diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 065069b1..94f5c211 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -227,7 +227,7 @@ class InfoBarNumberZap: bouquetlist = serviceHandler.list(bouquet) if not bouquetlist is None: while number: - bouquet = self.servicelist.appendDVBTypes(bouquetlist.getNext()) + bouquet = bouquetlist.getNext() if not bouquet.valid(): #check end of list break if bouquet.flags & eServiceReference.isDirectory: -- 2.30.2