if (convertFunc)
{
fillTuple(convertFuncArgs, argstring, argcount, service, ptr, nowTime, service_name);
- PyObject *result = PyEval_CallObject(convertFunc, convertFuncArgs);
+ PyObject *result = PyObject_CallObject(convertFunc, convertFuncArgs);
if (result == NULL)
{
+ if (service_name)
+ Py_DECREF(service_name);
if (nowTime)
Py_DECREF(nowTime);
Py_DECREF(convertFuncArgs);
+ Py_DECREF(dest_list);
return result;
}
PyList_Append(dest_list, result);
+ Py_DECREF(result);
}
else
{
PyObject *tuple = PyTuple_New(argcount);
fillTuple(tuple, argstring, argcount, service, ptr, nowTime, service_name);
PyList_Append(dest_list, tuple);
+ Py_DECREF(tuple);
}
return 0;
}
int tupleSize=PyTuple_Size(item);
int tupleIt=0;
PyObject *service=NULL;
- PyObject *service_name=NULL;
- eServiceReference ref;
- char *refstr=NULL;
- while(tupleSize > tupleIt)
+ while(tupleSize > tupleIt) // parse query args
{
PyObject *entry=PyTuple_GET_ITEM(item, tupleIt); // borrowed reference!
switch(tupleIt++)
{
case 0:
{
- refstr = PyString_AS_STRING(entry);
- ref = eServiceReference(refstr);
- if (must_get_service_name)
+ if (!PyString_Check(entry))
{
- service = entry;
- ePtr<iStaticServiceInformation> sptr;
- eServiceCenterPtr ptr;
- eServiceCenter::getPrivInstance(ptr);
- if (ptr)
- {
- ptr->info(ref, sptr);
- if (sptr)
- {
- std::string name;
- sptr->getName(ref, name);
- if (name.length())
- service_name = PyString_FromString(name.c_str());
- }
- }
- if (!service_name)
- service_name = PyString_FromString("<n/a>");
+ eDebug("tuple entry 0 is no a string");
+ continue;
}
+ service = entry;
break;
}
case 1:
if (type < 0 || type > 1)
{
eDebug("unknown type %d", type);
- goto nextListEntry;
+ continue;
}
break;
case 2:
break;
}
}
- if (refstr)
+ eServiceReference ref(PyString_AS_STRING(service));
+ if (ref.type != eServiceReference::idDVB)
+ {
+ eDebug("service reference for epg query is not valid");
+ continue;
+ }
+ PyObject *service_name=NULL;
+ if (must_get_service_name)
{
- if (minutes)
+ ePtr<iStaticServiceInformation> sptr;
+ eServiceCenterPtr service_center;
+ eServiceCenter::getPrivInstance(service_center);
+ if (service_center)
{
- Lock();
- if (!startTimeQuery(ref, stime, minutes))
+ service_center->info(ref, sptr);
+ if (sptr)
{
- ePtr<eServiceEvent> ptr;
- while (!getNextTimeEntry(ptr))
- {
- PyObject *ret = handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs);
- if (ret)
- return ret;
- }
+ std::string name;
+ sptr->getName(ref, name);
+ if (name.length())
+ service_name = PyString_FromString(name.c_str());
}
- else
- eDebug("startTimeQuery failed %s", refstr);
- Unlock();
}
- else
+ if (!service_name)
+ service_name = PyString_FromString("<n/a>");
+ }
+ if (minutes)
+ {
+ Lock();
+ if (!startTimeQuery(ref, stime, minutes))
{
ePtr<eServiceEvent> ptr;
- if (stime)
+ while (!getNextTimeEntry(ptr))
{
- if (type == 0)
- lookupEventTime(ref, stime, ptr);
- else // type == 1
- lookupEventId(ref, event_id, ptr);
+ PyObject *ret = handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs);
+ if (ret)
+ return ret;
}
- PyObject *ret = handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs);
- if (ret)
- return ret;
}
+ Unlock();
+ }
+ else
+ {
+ ePtr<eServiceEvent> ptr;
+ if (stime)
+ {
+ if (type == 0)
+ lookupEventTime(ref, stime, ptr);
+ else // type == 1
+ lookupEventId(ref, event_id, ptr);
+ }
+ PyObject *ret = handleEvent(ptr, dest_list, argstring, argcount, service, nowTime, service_name, convertFunc, convertFuncArgs);
+ if (ret)
+ return ret;
}
-nextListEntry:
if (service_name)
Py_DECREF(service_name);
}
Py_DECREF(nowTime);
return dest_list;
}
+
+
+
+