X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/5c4cd1a455e924e578478c97d00b799ef3192ef0..bf5a085bb50970bb6d1e4e6b4a8b4dbce33a7ba3:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 3f5ecb86..9d9f2d1f 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 &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 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(""); + 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()); } @@ -1177,7 +1193,7 @@ RESULT eDVBServicePlay::stop() if (!::stat(m_reference.path.c_str(), &s)) saveCuesheet(); } - + m_event((iPlayableService*)this, evStopped); return 0; } @@ -1754,19 +1770,54 @@ int eDVBServiceBase::getFrontendInfo(int w) return fe->readFrontendData(w); } -PyObject *eDVBServiceBase::getFrontendData(bool original) +PyObject *eDVBServiceBase::getFrontendData() { - ePyObject ret; + ePyObject ret = PyDict_New(); + if (ret) + { + eUsePtr channel; + if(!m_service_handler.getChannel(channel)) + { + ePtr fe; + if(!channel->getFrontend(fe)) + fe->getFrontendData(ret); + } + } + else + Py_RETURN_NONE; + return ret; +} - eUsePtr channel; - if(!m_service_handler.getChannel(channel)) +PyObject *eDVBServiceBase::getFrontendStatus() +{ + ePyObject ret = PyDict_New(); + if (ret) + { + eUsePtr channel; + if(!m_service_handler.getChannel(channel)) + { + ePtr fe; + if(!channel->getFrontend(fe)) + fe->getFrontendStatus(ret); + } + } + else + Py_RETURN_NONE; + return ret; +} + +PyObject *eDVBServiceBase::getTransponderData(bool original) +{ + ePyObject ret = PyDict_New(); + if (ret) { - ePtr fe; - if(!channel->getFrontend(fe)) + eUsePtr channel; + if(!m_service_handler.getChannel(channel)) { - ret = fe->readTransponderData(original); - if (ret) + ePtr fe; + if(!channel->getFrontend(fe)) { + fe->getTransponderData(ret, original); ePtr feparm; channel->getCurrentFrontendParameters(feparm); if (feparm) @@ -1792,11 +1843,30 @@ PyObject *eDVBServiceBase::getFrontendData(bool original) } } } - if (!ret) + else Py_RETURN_NONE; return ret; } +PyObject *eDVBServiceBase::getAll(bool original) +{ + ePyObject ret = getTransponderData(original); + if (ret != Py_None) + { + eUsePtr channel; + if(!m_service_handler.getChannel(channel)) + { + ePtr fe; + if(!channel->getFrontend(fe)) + { + fe->getFrontendData(ret); + fe->getFrontendStatus(ret); + } + } + } + return ret; +} + int eDVBServicePlay::getNumberOfSubservices() { ePtr evt; @@ -1870,7 +1940,7 @@ RESULT eDVBServicePlay::stopTimeshift() close(m_timeshift_fd); eDebug("remove timeshift file"); - remove(m_timeshift_file.c_str()); + eBackgroundFileEraser::getInstance()->erase(m_timeshift_file.c_str()); return 0; } @@ -1985,6 +2055,11 @@ void eDVBServicePlay::updateTimeshiftPids() i != program.audioStreams.end(); ++i) pids_to_record.insert(i->pid); + for (std::vector::const_iterator + i(program.subtitleStreams.begin()); + i != program.subtitleStreams.end(); ++i) + pids_to_record.insert(i->pid); + std::set new_pids, obsolete_pids; std::set_difference(pids_to_record.begin(), pids_to_record.end(), @@ -2019,6 +2094,7 @@ void eDVBServicePlay::switchToLive() m_new_dvb_subtitle_page_connection = 0; m_new_subtitle_page_connection = 0; m_radiotext_updated_connection = 0; + m_video_event_connection = 0; /* free the timeshift service handler, we need the resources */ m_service_handler_timeshift.free(); @@ -2042,17 +2118,18 @@ void eDVBServicePlay::switchToTimeshift() m_new_subtitle_page_connection = 0; m_new_dvb_subtitle_page_connection = 0; m_radiotext_updated_connection = 0; + m_video_event_connection = 0; m_timeshift_active = 1; - m_event((iPlayableService*)this, evSeekableStatusChanged); - eServiceReferenceDVB r = (eServiceReferenceDVB&)m_reference; r.path = m_timeshift_file; m_cue = new eCueSheet(); m_service_handler_timeshift.tune(r, 1, m_cue); /* use the decoder demux for everything */ updateDecoder(); /* mainly to switch off PCR */ + + m_event((iPlayableService*)this, evSeekableStatusChanged); } void eDVBServicePlay::updateDecoder() @@ -2705,7 +2782,6 @@ void eDVBServicePlay::setPCMDelay(int delay) void eDVBServicePlay::video_event(struct iTSMPEGDecoder::videoEvent event) { - eDebug("!!!!!!!!!! Video Event type %d, aspect %d, %dx%d", event.type, event.aspect, event.width, event.height); memcpy(&m_videoEventData, &event, sizeof(iTSMPEGDecoder::videoEvent)); m_event((iPlayableService*)this, evVideoSizeChanged); }