aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-01-11 12:50:19 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-01-11 12:50:19 +0000
commitb14f1520fe0dabd185ab3555c9d2dd8ab5276dd0 (patch)
tree709e35aec7d42c672d8aa953b52d0d7c494dd3d8
parent26ff43bdf1eb6fe4da12db2c61a63c0dcd9612c8 (diff)
downloadenigma2-b14f1520fe0dabd185ab3555c9d2dd8ab5276dd0.tar.gz
enigma2-b14f1520fe0dabd185ab3555c9d2dd8ab5276dd0.zip
filter short name brakets in getContent ('N')
add possibility to get short names with getContent ('n') the same for epg.search... filter short name brakets in Converter/ServiceName
-rw-r--r--lib/base/estring.cpp18
-rw-r--r--lib/base/estring.h2
-rw-r--r--lib/dvb/epgcache.cpp63
-rw-r--r--lib/python/Components/Converter/ServiceName.py3
-rw-r--r--lib/python/Components/EpgList.py18
-rw-r--r--lib/service/servicedvb.cpp38
6 files changed, 102 insertions, 40 deletions
diff --git a/lib/base/estring.cpp b/lib/base/estring.cpp
index 77746299..487dceec 100644
--- a/lib/base/estring.cpp
+++ b/lib/base/estring.cpp
@@ -5,6 +5,24 @@
#include <lib/base/encoding.h>
#include <lib/base/estring.h>
+std::string buildShortName( const std::string &str )
+{
+ std::string tmp;
+ static char stropen[3] = { 0xc2, 0x86, 0x00 };
+ static char strclose[3] = { 0xc2, 0x87, 0x00 };
+ unsigned int open=std::string::npos-1;
+ while ( (open = str.find(stropen, open+2)) != std::string::npos )
+ {
+ unsigned int close = str.find(strclose, open);
+ if ( close != std::string::npos )
+ {
+ tmp+=str.substr( open+2, close-(open+2) );
+ eDebug("now %s", tmp.c_str());
+ }
+ }
+ return tmp.length() ? tmp : str;
+}
+
std::string getNum(int val, int sys)
{
// Returns a string that contain the value val as string
diff --git a/lib/base/estring.h b/lib/base/estring.h
index 34022280..68e0970f 100644
--- a/lib/base/estring.h
+++ b/lib/base/estring.h
@@ -6,6 +6,8 @@
#include <stdio.h>
#include "eerror.h"
+std::string buildShortName( const std::string &str );
+
int strnicmp(const char*, const char*, int);
std::string getNum(int num, int base=10);
diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp
index 42b21833..c76b0c06 100644
--- a/lib/dvb/epgcache.cpp
+++ b/lib/dvb/epgcache.cpp
@@ -12,6 +12,7 @@
#include <sys/vfs.h> // for statfs
// #include <libmd5sum.h>
#include <lib/base/eerror.h>
+#include <lib/base/estring.h>
#include <lib/dvb/pmt.h>
#include <lib/dvb/db.h>
#include <lib/python/python.h>
@@ -1619,6 +1620,7 @@ void fillTuple(ePyObject tuple, char *argstring, int argcount, ePyObject service
tmp = service;
inc_refcount = true;
break;
+ case 'n': // short service name
case 'N': // service name
tmp = service_name;
inc_refcount = true;
@@ -1678,6 +1680,7 @@ int handleEvent(ePtr<eServiceEvent> &ptr, ePyObject dest_list, char* argstring,
// C = Current Time
// R = Service Reference
// N = Service Name
+// n = Short Service Name
// then for each service follows a tuple
// first tuple entry is the servicereference (as string... use the ref.toString() function)
// the second is the type of query
@@ -1740,7 +1743,7 @@ PyObject *eEPGCache::lookupEvent(ePyObject list, ePyObject convertFunc)
PyLong_FromLong(eDVBLocalTimeHandler::getInstance()->nowTime()) :
ePyObject();
- bool must_get_service_name = strchr(argstring, 'N') ? true : false;
+ int must_get_service_name = strchr(argstring, 'N') ? 1 : strchr(argstring, 'n') ? 2 : 0;
// create dest list
ePyObject dest_list=PyList_New(0);
@@ -1828,6 +1831,19 @@ PyObject *eEPGCache::lookupEvent(ePyObject list, ePyObject convertFunc)
{
std::string name;
sptr->getName(ref, name);
+
+ if (must_get_service_name == 1)
+ {
+ unsigned int pos;
+ // filter short name brakets
+ while((pos = name.find("\xc2\x86")) != std::string::npos)
+ name.erase(pos,2);
+ while((pos = name.find("\xc2\x87")) != std::string::npos)
+ name.erase(pos,2);
+ }
+ else
+ name = buildShortName(name);
+
if (name.length())
service_name = PyString_FromString(name.c_str());
}
@@ -1920,6 +1936,7 @@ void fillTuple2(ePyObject tuple, const char *argstring, int argcount, eventData
tmp = service_reference;
inc_refcount = true;
break;
+ case 'n': // short service name
case 'N': // service name
tmp = service_name;
inc_refcount = true;
@@ -1946,6 +1963,7 @@ void fillTuple2(ePyObject tuple, const char *argstring, int argcount, eventData
// E = Event Extended Description
// R = Service Reference
// N = Service Name
+// n = Short Service Name
// the second tuple entry is the MAX matches value
// the third tuple entry is the type of query
// 0 = search for similar broadcastings (SIMILAR_BROADCASTINGS_SEARCH)
@@ -2224,24 +2242,41 @@ PyObject *eEPGCache::search(ePyObject arg)
eDebug("event not found !!!!!!!!!!!");
}
// create service name
- if (!service_name && strchr(argstring,'N'))
+ if (!service_name)
{
- ePtr<iStaticServiceInformation> sptr;
- eServiceCenterPtr service_center;
- eServiceCenter::getPrivInstance(service_center);
- if (service_center)
+ int must_get_service_name = strchr(argstring, 'N') ? 1 : strchr(argstring, 'n') ? 2 : 0;
+ if (must_get_service_name)
{
- service_center->info(ref, sptr);
- if (sptr)
+ ePtr<iStaticServiceInformation> sptr;
+ eServiceCenterPtr service_center;
+ eServiceCenter::getPrivInstance(service_center);
+ if (service_center)
{
- std::string name;
- sptr->getName(ref, name);
- if (name.length())
- service_name = PyString_FromString(name.c_str());
+ service_center->info(ref, sptr);
+ if (sptr)
+ {
+ std::string name;
+ sptr->getName(ref, name);
+
+ if (must_get_service_name == 1)
+ {
+ unsigned int pos;
+ // filter short name brakets
+ while((pos = name.find("\xc2\x86")) != std::string::npos)
+ name.erase(pos,2);
+ while((pos = name.find("\xc2\x87")) != std::string::npos)
+ name.erase(pos,2);
+ }
+ else
+ name = buildShortName(name);
+
+ if (name.length())
+ service_name = PyString_FromString(name.c_str());
+ }
}
+ if (!service_name)
+ service_name = PyString_FromString("<n/a>");
}
- if (!service_name)
- service_name = PyString_FromString("<n/a>");
}
// create servicereference string
if (!service_reference && strchr(argstring,'R'))
diff --git a/lib/python/Components/Converter/ServiceName.py b/lib/python/Components/Converter/ServiceName.py
index 7c463a62..9ccbda58 100644
--- a/lib/python/Components/Converter/ServiceName.py
+++ b/lib/python/Components/Converter/ServiceName.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
from Components.Converter.Converter import Converter
from enigma import iServiceInformation, iPlayableService
from Components.Element import cached
@@ -27,7 +28,7 @@ class ServiceName(Converter, object):
return ""
if self.type == self.NAME:
- return info.getName()
+ return info.getName().replace('\xc2\x86', '').replace('\xc2\x87', '')
elif self.type == self.PROVIDER:
return self.getServiceInfoValue(info, iServiceInformation.sProvider)
diff --git a/lib/python/Components/EpgList.py b/lib/python/Components/EpgList.py
index ca209bda..38400945 100644
--- a/lib/python/Components/EpgList.py
+++ b/lib/python/Components/EpgList.py
@@ -1,4 +1,3 @@
-# -*- coding: utf-8 -*-
from HTMLComponent import *
from GUIComponent import *
@@ -164,25 +163,16 @@ class EPGList(HTMLComponent, GUIComponent):
def buildMultiEntry(self, changecount, service, eventId, begTime, duration, EventName, nowTime, service_name):
rec=begTime and (self.timer.isInTimer(eventId, begTime, duration, service) > ((duration/10)*8))
- sname = service_name
r1=self.service_rect
r2=self.progress_rect
r3=self.descr_rect
r4=self.start_end_rect
res = [ None ] # no private data needed
- re = compile('\xc2\x86.*?\xc2\x87')
- list = re.findall(sname)
- if len(list):
- sname=''
- for substr in list:
- sname+=substr[2:len(substr)-2]
- if len(sname) == 0:
- sname = service_name;
if rec:
- res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width()-21, r1.height(), 0, RT_HALIGN_LEFT, sname))
+ res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width()-21, r1.height(), 0, RT_HALIGN_LEFT, service_name))
res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, r1.left()+r1.width()-16, r1.top(), 21, 21, loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, 'epgclock-fs8.png'))))
else:
- res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, sname))
+ res.append((eListboxPythonMultiContent.TYPE_TEXT, r1.left(), r1.top(), r1.width(), r1.height(), 0, RT_HALIGN_LEFT, service_name))
if begTime is not None:
if nowTime < begTime:
begin = localtime(begTime)
@@ -207,7 +197,7 @@ class EPGList(HTMLComponent, GUIComponent):
def fillMultiEPG(self, services, stime=-1):
t = time()
- test = [ '0RIBDTCN' ]
+ test = [ '0RIBDTCn' ]
for service in services:
tuple = (service.ref.toString(), 0, stime)
test.append( tuple )
@@ -218,7 +208,7 @@ class EPGList(HTMLComponent, GUIComponent):
def updateMultiEPG(self, direction):
t = time()
- test = [ 'RIBDTCN' ]
+ test = [ 'RIBDTCn' ]
for x in self.list:
service = x[1]
begTime = x[3]
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 62fc0482..238f838f 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -65,16 +65,7 @@ RESULT eStaticServiceDVBInformation::getName(const eServiceReference &ref, std::
if (!service_center->info(parent, service_info))
{
if (!service_info->getName(parent, name))
- {
- // just show short name
- unsigned int pos = name.find("\xc2\x86");
- if ( pos != std::string::npos )
- name.erase(0, pos+2);
- pos = name.find("\xc2\x87");
- if ( pos != std::string::npos )
- name.erase(pos);
- name+=" - ";
- }
+ name=buildShortName(name) + " - ";
}
}
}
@@ -730,6 +721,7 @@ RESULT eDVBServiceList::getContent(std::list<eServiceReference> &list, bool sort
// S = Service Reference (as python string object .. same as ref.toString())
// C = Service Reference (as python string object .. same as ref.toCompareString())
// N = Service Name (as python string object)
+// n = Short Service Name (short name brakets used) (as python string object)
// when exactly one return value per service is selected in the format string,
// then each value is directly a list entry
// when more than one value is returned per service, then the list is a list of
@@ -750,7 +742,7 @@ PyObject *eDVBServiceList::getContent(const char* format, bool sorted)
ePtr<iStaticServiceInformation> sptr;
eServiceCenterPtr service_center;
- if (strchr(format, 'N'))
+ if (strchr(format, 'N') || strchr(format, 'n'))
eServiceCenter::getPrivInstance(service_center);
ret = PyList_New(services);
@@ -782,6 +774,30 @@ PyObject *eDVBServiceList::getContent(const char* format, bool sorted)
{
std::string name;
sptr->getName(ref, name);
+
+ // filter short name brakets
+ unsigned int pos;
+ while((pos = name.find("\xc2\x86")) != std::string::npos)
+ name.erase(pos,2);
+ while((pos = name.find("\xc2\x87")) != std::string::npos)
+ name.erase(pos,2);
+
+ if (name.length())
+ tmp = PyString_FromString(name.c_str());
+ }
+ }
+ if (!tmp)
+ tmp = PyString_FromString("<n/a>");
+ break;
+ case 'n': // short service name
+ if (service_center)
+ {
+ service_center->info(ref, sptr);
+ if (sptr)
+ {
+ std::string name;
+ sptr->getName(ref, name);
+ name = buildShortName(name);
if (name.length())
tmp = PyString_FromString(name.c_str());
}