Skip to content

Commit

Permalink
[eDVBDB]
Browse files Browse the repository at this point in the history
* improve getAllServicesRaw
  • Loading branch information
jbleyel committed Sep 19, 2024
1 parent 9f94476 commit 095c395
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 14 deletions.
50 changes: 37 additions & 13 deletions lib/dvb/db.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2606,24 +2606,48 @@ void eDVBDB::searchAllReferences(std::vector<eServiceReference> &result, int tsi
}
}

PyObject *eDVBDB::getAllServicesRaw()
PyObject *eDVBDB::getAllServicesRaw(int type)
{

ePyObject serviceList = PyDict_New();
if (serviceList)
{
for (std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator sit(m_services.begin());
sit != m_services.end(); ++sit)
{
ePyObject tuple = PyTuple_New(5);
ePtr<eDVBService> service = sit->second;
PyTuple_SET_ITEM(tuple, 0, PyUnicode_FromString(service->m_service_name.c_str()));
PyTuple_SET_ITEM(tuple, 1, PyUnicode_FromString(!service->m_service_display_name.empty() ? service->m_service_display_name.c_str() : service->m_service_name.c_str()));
PyTuple_SET_ITEM(tuple, 2, PyUnicode_FromString(service->m_provider_name.c_str()));
PyTuple_SET_ITEM(tuple, 3, PyUnicode_FromString(service->m_provider_display_name.c_str()));
PyTuple_SET_ITEM(tuple, 4, PyLong_FromLongLong(service->m_flags));
PyDict_SetItemString(serviceList, sit->first.toReferenceString().c_str(), tuple);
Py_DECREF(tuple);

switch (type)
{
case 1:
for (std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator sit(m_services.begin()); sit != m_services.end(); ++sit)
{
ePyObject tuple = PyTuple_New(6);
ePtr<eDVBService> service = sit->second;

PyTuple_SET_ITEM(tuple, 0, PyUnicode_FromString(sit->first.toReferenceString().c_str()));
PyTuple_SET_ITEM(tuple, 1, PyUnicode_FromString(service->m_provider_name.c_str()));
PyTuple_SET_ITEM(tuple, 2, PyUnicode_FromString(service->m_provider_display_name.c_str()));
PyTuple_SET_ITEM(tuple, 3, PyUnicode_FromString(service->m_service_name.c_str()));
PyTuple_SET_ITEM(tuple, 4, PyUnicode_FromString(!service->m_service_display_name.empty() ? service->m_service_display_name.c_str() : service->m_service_name.c_str()));
int flags = (service->m_flags & (eDVBService::dxIntNewServiceName | eDVBService::dxIntNewProvider)) >> 14;
PyTuple_SET_ITEM(tuple, 5, PyLong_FromLongLong(flags));
PyDict_SetItemString(serviceList, sit->first.toLCNReferenceString().c_str(), tuple);
Py_DECREF(tuple);
}
break;

default:
for (std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator sit(m_services.begin()); sit != m_services.end(); ++sit)
{
ePyObject tuple = PyTuple_New(5);
ePtr<eDVBService> service = sit->second;
PyTuple_SET_ITEM(tuple, 0, PyUnicode_FromString(service->m_service_name.c_str()));
PyTuple_SET_ITEM(tuple, 1, PyUnicode_FromString(!service->m_service_display_name.empty() ? service->m_service_display_name.c_str() : service->m_service_name.c_str()));
PyTuple_SET_ITEM(tuple, 2, PyUnicode_FromString(service->m_provider_name.c_str()));
PyTuple_SET_ITEM(tuple, 3, PyUnicode_FromString(service->m_provider_display_name.c_str()));
int flags = (service->m_flags & (eDVBService::dxIntNewServiceName | eDVBService::dxIntNewProvider)) >> 14;
PyTuple_SET_ITEM(tuple, 4, PyLong_FromLongLong(flags));
PyDict_SetItemString(serviceList, sit->first.toReferenceString().c_str(), tuple);
Py_DECREF(tuple);
}
break;
}

}
Expand Down
2 changes: 1 addition & 1 deletion lib/dvb/db.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ class eDVBDB: public iDVBChannelList
bool isValidService(int tsid, int onid, int sid);
void parseServiceData(ePtr<eDVBService> s, std::string str);
int getMaxNumber() const { return m_max_number; }
PyObject *getAllServicesRaw();
PyObject *getAllServicesRaw(int type=0);
};

#ifndef SWIG
Expand Down
1 change: 1 addition & 0 deletions lib/service/iservice.h
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ class eServiceReference
std::string toString() const;
std::string toCompareString() const;
std::string toReferenceString() const;
std::string toLCNReferenceString() const;
#ifndef SWIG
operator bool() const
{
Expand Down
12 changes: 12 additions & 0 deletions lib/service/service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,18 @@ std::string eServiceReference::toReferenceString() const
return ret;
}

std::string eServiceReference::toLCNReferenceString() const
{
std::string ret;
ret.reserve((4 * sizeof(data)/sizeof(*data)) + 8); /* Estimate required space */

for (unsigned int i=1; i<5; ++i)
{
ret += getNum(data[i], 0x10);
ret += ':';
}
return ret;
}

eServiceCenter *eServiceCenter::instance;

Expand Down

0 comments on commit 095c395

Please sign in to comment.