From: Andreas Monzner Date: Fri, 14 Jul 2006 12:59:18 +0000 (+0000) Subject: add possibility to view eventinfo in recorded movielist (move cursor to X-Git-Tag: 2.6.0~3168 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/a65edb264cc943a2a15b6886d9fa3190a92373c0 add possibility to view eventinfo in recorded movielist (move cursor to recorded movie and press info) --- diff --git a/data/keymap.xml b/data/keymap.xml index 047e0742..1300b7a4 100644 --- a/data/keymap.xml +++ b/data/keymap.xml @@ -227,6 +227,7 @@ + diff --git a/lib/python/Components/MovieList.py b/lib/python/Components/MovieList.py index 970180cd..1a61d20f 100644 --- a/lib/python/Components/MovieList.py +++ b/lib/python/Components/MovieList.py @@ -59,6 +59,10 @@ class MovieList(HTMLComponent, GUIComponent): def getCurrentIndex(self): return self.instance.getCurrentIndex() + def getCurrentEvent(self): + l = self.l.getCurrentSelection() + return l and l[0] and l[1] and l[1].getEvent(l[0]) + def getCurrent(self): l = self.l.getCurrentSelection() return l and l[0] diff --git a/lib/python/Screens/MovieSelection.py b/lib/python/Screens/MovieSelection.py index 82c9c7e5..62c797eb 100644 --- a/lib/python/Screens/MovieSelection.py +++ b/lib/python/Screens/MovieSelection.py @@ -20,15 +20,15 @@ class ChannelContextMenu(FixedMenu): def __init__(self, session, csel, service): self.csel = csel self.service = service - + menu = [(_("back"), self.close), (_("delete..."), self.delete)] - + for p in plugins.getPlugins(PluginDescriptor.WHERE_MOVIELIST): menu.append((p.description, boundFunction(self.execPlugin, p))) - + FixedMenu.__init__(self, session, _("Movie Menu"), menu) self.skinName = "Menu" - + def execPlugin(self, plugin): plugin(session=self.session, service=self.service) @@ -89,6 +89,7 @@ class MovieSelection(Screen): { "cancel": self.abort, "ok": self.movieSelected, + "showEventInfo": self.showEventInformation, "contextMenu": self.doContext, }) self["actions"].csel = self @@ -96,7 +97,14 @@ class MovieSelection(Screen): self.lengthTimer = eTimer() self.lengthTimer.timeout.get().append(self.updateLengthData) - + + def showEventInformation(self): + from Screens.EventView import EventViewSimple + from ServiceReference import ServiceReference + evt = self["list"].getCurrentEvent() + if evt: + self.session.open(EventViewSimple, evt, ServiceReference(self.getCurrent())) + def go(self): # ouch. this should redraw our "Please wait..."-text. # this is of course not the right way to do this. diff --git a/lib/service/event.cpp b/lib/service/event.cpp index 07c92c52..4dda5779 100644 --- a/lib/service/event.cpp +++ b/lib/service/event.cpp @@ -10,6 +10,9 @@ #include #include +#include +#include + // static members / methods std::string eServiceEvent::m_language = "de_DE"; @@ -185,6 +188,27 @@ RESULT eServiceEvent::parseFrom(Event *evt, int tsidonid) return 0; } +RESULT eServiceEvent::parseFrom(const std::string filename, int tsidonid) +{ + if (!filename.empty()) + { + int fd = ::open( filename.c_str(), O_RDONLY ); + if ( fd > -1 ) + { + __u8 buf[4096]; + int rd = ::read(fd, buf, 4096); + ::close(fd); + if ( rd > 12 /*EIT_LOOP_SIZE*/ ) + { + Event ev(buf); + parseFrom(&ev, tsidonid); + return 0; + } + } + } + return -1; +} + std::string eServiceEvent::getBeginTimeString() const { tm t; diff --git a/lib/service/event.h b/lib/service/event.h index 285a4ae3..25b9d0b7 100644 --- a/lib/service/event.h +++ b/lib/service/event.h @@ -44,6 +44,7 @@ class eServiceEvent: public iObject public: #ifndef SWIG RESULT parseFrom(Event *evt, int tsidonid=0); + RESULT parseFrom(const std::string filename, int tsidonid=0); #endif static void setEPGLanguage( const std::string language ); time_t getBeginTime() const { return m_begin; } diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 7eeee693..7dba7321 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -205,6 +205,8 @@ typedef long long pts_t; Hide the result only if there is another way to check for failure! */ +TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); + class iStaticServiceInformation: public iObject { #ifdef SWIG @@ -226,8 +228,6 @@ public: TEMPLATE_TYPEDEF(ePtr, iStaticServiceInformationPtr); -TEMPLATE_TYPEDEF(ePtr, eServiceEventPtr); - class iServiceInformation: public iObject { #ifdef SWIG diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index bae45aae..616c7007 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -25,8 +25,6 @@ #include #include -#include - #define INTERNAL_TELETEXT #ifndef BYTE_ORDER @@ -149,7 +147,8 @@ public: eStaticServiceDVBPVRInformation(const eServiceReference &ref); RESULT getName(const eServiceReference &ref, std::string &name); int getLength(const eServiceReference &ref); - + RESULT getEvent(const eServiceReference &ref, ePtr &SWIG_OUTPUT, time_t start_time); + int getInfo(const eServiceReference &ref, int w); std::string getInfoString(const eServiceReference &ref,int w); }; @@ -216,6 +215,24 @@ std::string eStaticServiceDVBPVRInformation::getInfoString(const eServiceReferen } } +RESULT eStaticServiceDVBPVRInformation::getEvent(const eServiceReference &ref, ePtr &evt, time_t start_time) +{ + if (!ref.path.empty()) + { + ePtr event = new eServiceEvent; + std::string filename = ref.path; + filename.erase(filename.length()-2, 2); + filename+="eit"; + if (!event->parseFrom(filename, (m_parser.m_ref.getTransportStreamID().get()<<16)|m_parser.m_ref.getOriginalNetworkID().get())) + { + evt = event; + return 0; + } + } + evt = 0; + return -1; +} + class eDVBPVRServiceOfflineOperations: public iServiceOfflineOperations { DECLARE_REF(eDVBPVRServiceOfflineOperations); @@ -758,25 +775,15 @@ RESULT eDVBServicePlay::start() std::string filename = service.path; filename.erase(filename.length()-2, 2); filename+="eit"; - int fd = ::open( filename.c_str(), O_RDONLY ); - if ( fd > -1 ) + ePtr event = new eServiceEvent; + if (!event->parseFrom(filename, (service.getTransportStreamID().get()<<16)|service.getOriginalNetworkID().get())) { - __u8 buf[4096]; - int rd = ::read(fd, buf, 4096); - ::close(fd); - if ( rd > 12 /*EIT_LOOP_SIZE*/ ) - { - Event ev(buf); - ePtr event = new eServiceEvent; - ePtr empty; - event->parseFrom(&ev, (service.getTransportStreamID().get()<<16)|service.getOriginalNetworkID().get()); - m_event_handler.inject(event, 0); - m_event_handler.inject(empty, 1); - eDebug("injected"); - } + ePtr empty; + m_event_handler.inject(event, 0); + m_event_handler.inject(empty, 1); } } - + if (m_is_pvr) loadCuesheet();