cleanup grayout handling in servicelist.. so no more grayout in timeout channelselect...
[enigma2.git] / lib / service / iservice.h
index 98ece76eab5d2edbefd075b6d18b1bb48792994f..c477f11db41b4e433d4a3a8fcb0b6fcac44e5352 100644 (file)
@@ -84,7 +84,7 @@ public:
 #ifndef SWIG
        std::string name;
 #endif
-       std::string getName() { return name; }
+       std::string getName() const { return name; }
        void setName( const std::string &n ) { name=n; }
 
        eServiceReference()
@@ -138,6 +138,10 @@ public:
                data[3]=data3;
                data[4]=data4;
        }
+       operator bool() const
+       {
+               return valid();
+       }
 #endif
        eServiceReference(int type, int flags, const std::string &path)
                : type(type), flags(flags), path(path)
@@ -170,10 +174,6 @@ public:
                        return r < 0;
                return path < c.path;
        }
-       operator bool() const
-       {
-               return valid();
-       }
        
        int valid() const
        {
@@ -224,7 +224,7 @@ typedef long long pts_t;
           
           Hide the result only if there is another way to check for failure! */
           
-SWIG_TEMPLATE_TYPEDEF(ePtr<eServiceEvent>, eServiceEventPtr);
+class eServiceEvent;
 
 SWIG_IGNORE(iStaticServiceInformation);
 class iStaticServiceInformation: public iObject
@@ -240,7 +240,7 @@ public:
        virtual int getLength(const eServiceReference &ref);
        virtual SWIG_VOID(RESULT) getEvent(const eServiceReference &ref, ePtr<eServiceEvent> &SWIG_OUTPUT, time_t start_time=-1);
                // returns true when not implemented
-       virtual int isPlayable(const eServiceReference &ref, const eServiceReference &ignore);
+       virtual int isPlayable(const eServiceReference &ref, const eServiceReference &ignore, bool simulate=false);
 
        virtual int getInfo(const eServiceReference &ref, int w);
        virtual std::string getInfoString(const eServiceReference &ref,int w);
@@ -261,6 +261,8 @@ public:
        enum {
                sIsCrypted,             /* is encrypted (no indication if decrypt was possible) */
                sAspect,                /* aspect ratio: 0=4:3, 1=16:9, 2=whatever we need */
+               sFrameRate,                     /* frame rate */
+               sProgressive,           /* 0 = interlaced, 1 = progressive */
                sIsMultichannel,        /* multichannel *available* (probably not selected) */
 
                        /* "user serviceable info" - they are not reliable. Don't use them for anything except the service menu!
@@ -284,13 +286,8 @@ public:
                sDescription,
                sServiceref,
                sTimeCreate,            /* unix time or string */
+               sFileSize,
 
-               sTitle,
-               sArtist,
-               sAlbum,
-               sComment,
-               sTracknumber,
-               sGenre,
                sCAIDs,
                sVideoType,             /* MPEG2 MPEG4 */
 
@@ -301,7 +298,65 @@ public:
                sVideoHeight,
                sVideoWidth,
 
-               sTransponderData        /* transponderdata as python dict */
+               sTransponderData,       /* transponderdata as python dict */
+
+               sCurrentChapter,
+               sCurrentTitle,
+               sTotalChapters,
+               sTotalTitles,
+
+               sTagTitle,
+               sTagTitleSortname,
+               sTagArtist,
+               sTagArtistSortname,
+               sTagAlbum,
+               sTagAlbumSortname,
+               sTagComposer,
+               sTagDate,
+               sTagGenre,
+               sTagComment,
+               sTagExtendedComment,
+               sTagTrackNumber,
+               sTagTrackCount,
+               sTagAlbumVolumeNumber,
+               sTagAlbumVolumeCount,
+               sTagLocation,
+               sTagHomepage,
+               sTagDescription,
+               sTagVersion,
+               sTagISRC,
+               sTagOrganization,
+               sTagCopyright,
+               sTagCopyrightURI,
+               sTagContact,
+               sTagLicense,
+               sTagLicenseURI,
+               sTagPerformer,
+               sTagCodec,
+               sTagVideoCodec,
+               sTagAudioCodec,
+               sTagBitrate,
+               sTagNominalBitrate,
+               sTagMinimumBitrate,
+               sTagMaximumBitrate,
+               sTagSerial,
+               sTagEncoder,
+               sTagEncoderVersion,
+               sTagTrackGain,
+               sTagTrackPeak,
+               sTagAlbumGain,
+               sTagAlbumPeak,
+               sTagReferenceLevel,
+               sTagLanguageCode,
+               sTagImage,
+               sTagPreviewImage,
+               sTagAttachment,
+               sTagBeatsPerMinute,
+               sTagKeywords,
+               sTagCRC,
+               sTagChannelMode,
+
+               sUser = 0x100
        };
        enum {
                resNA = -1,
@@ -354,7 +409,8 @@ public:
                signalQuality,
                lockState,
                syncState,
-               frontendNumber
+               frontendNumber,
+               signalQualitydB,
        };
 };
 
@@ -367,7 +423,10 @@ class iFrontendInformation: public iFrontendInformation_ENUMS, public iObject
 #endif
 public:
        virtual int getFrontendInfo(int w)=0;
-       virtual PyObject *getFrontendData(bool original=false)=0;
+       virtual PyObject *getFrontendData()=0;
+       virtual PyObject *getFrontendStatus()=0;
+       virtual PyObject *getTransponderData(bool original)=0;
+       virtual PyObject *getAll(bool original)=0; // a sum of getFrontendData/Status/TransponderData
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<iFrontendInformation>, iFrontendInformationPtr);
 
@@ -379,6 +438,8 @@ class iPauseableService: public iObject
        ~iPausableService();
 #endif
 public:
+
+               /* this will set the *state* directly. So just call a SINGLE function of those at a time. */
        virtual RESULT pause()=0;
        virtual RESULT unpause()=0;
 
@@ -414,6 +475,8 @@ public:
                   audio will be switched off, sync will be disabled etc. */
        virtual RESULT setTrickmode(int trick=0)=0;
        virtual RESULT isCurrentlySeekable()=0;
+       virtual RESULT seekChapter(int) { return -1; }
+       virtual RESULT seekTitle(int) { return -1; }
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<iSeekableService>, iSeekableServicePtr);
 
@@ -422,9 +485,11 @@ struct iAudioTrackInfo
 #ifndef SWIG
        std::string m_description;
        std::string m_language; /* iso639 */
+       int m_pid; /* for association with the stream. */
 #endif
        std::string getDescription() { return m_description; }
        std::string getLanguage() { return m_language; }
+       int getPID() { return m_pid; }
 };
 SWIG_ALLOW_OUTPUT_SIMPLE(iAudioTrackInfo);
 
@@ -439,6 +504,7 @@ public:
        virtual int getNumberOfTracks()=0;
        virtual RESULT selectTrack(unsigned int i)=0;
        virtual SWIG_VOID(RESULT) getTrackInfo(struct iAudioTrackInfo &SWIG_OUTPUT, unsigned int n)=0;
+       virtual int getCurrentTrack()=0;
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<iAudioTrackSelection>, iAudioTrackSelectionPtr);
 
@@ -480,17 +546,30 @@ public:
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<iAudioDelay>, iAudioDelayPtr);
 
-SWIG_IGNORE(iRadioText);
-class iRadioText: public iObject
+class iRdsDecoder_ENUMS
+{
+#ifdef SWIG
+       iRdsDecoder_ENUMS();
+       ~iRdsDecoder_ENUMS();
+#endif
+public:
+       enum { RadioText, RtpText };
+};
+
+SWIG_IGNORE(iRdsDecoder);
+class iRdsDecoder: public iObject, public iRdsDecoder_ENUMS
 {
 #ifdef SWIG
-       iRadioText();
-       ~iRadioText();
+       iRdsDecoder();
+       ~iRdsDecoder();
 #endif
 public:
-       virtual std::string getRadioText(int x=0)=0;
+       virtual std::string getText(int x=RadioText)=0;
+       virtual void showRassSlidePicture()=0;
+       virtual void showRassInteractivePic(int page, int subpage)=0;
+       virtual SWIG_PYOBJECT(ePyObject) getRassInteractiveMask()=0;
 };
-SWIG_TEMPLATE_TYPEDEF(ePtr<iRadioText>, iRadioTextPtr);
+SWIG_TEMPLATE_TYPEDEF(ePtr<iRdsDecoder>, iRdsDecoderPtr);
 
 SWIG_IGNORE(iSubserviceList);
 class iSubserviceList: public iObject
@@ -640,11 +719,75 @@ public:
 
                /* for transferring a service... */
        virtual SWIG_VOID(RESULT) getListOfFilenames(std::list<std::string> &SWIG_OUTPUT)=0;
+       
+               /* a blocking call to reindex a file */
+       virtual int reindex() = 0;
 
                // TODO: additional stuff, like a conversion interface?
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<iServiceOfflineOperations>, iServiceOfflineOperationsPtr);
 
+SWIG_IGNORE(iStreamableService);
+class iStreamableService: public iObject
+{
+#ifdef SWIG
+       iStreamableService();
+       ~iStreamableService();
+#endif
+public:
+               /* returns a dict:
+                       { "demux": <n>,
+                         "pids": [(x,type),(y,type),(z,type),..],
+                         ...
+                       }
+                       with type being "video", "audio", "pmt", "pat"...
+               */
+       virtual PyObject *getStreamingData()=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iStreamableService>, iStreamableServicePtr);
+
+SWIG_IGNORE(iStreamedService);
+class iStreamedService: public iObject
+{
+#ifdef SWIG
+       iStreamedService();
+       ~iStreamedService();
+#endif
+public:
+       virtual PyObject *getBufferCharge()=0;
+       virtual int setBufferSize(int size)=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iStreamedService>, iStreamedServicePtr);
+
+class iServiceKeys_ENUMS
+{
+#ifdef SWIG
+       iServiceKeys_ENUMS();
+       ~iServiceKeys_ENUMS();
+#endif
+public:
+       enum {
+               keyLeft,
+               keyRight,
+               keyUp,
+               keyDown,
+               keyOk,
+               keyUser = 0x100
+       };
+};
+
+SWIG_IGNORE(iServiceKeys);
+class iServiceKeys: public iServiceKeys_ENUMS, public iObject
+{
+#ifdef SWIG
+       iServiceKeys();
+       ~iServiceKeys();
+#endif
+public:
+       virtual SWIG_VOID(RESULT) keyPressed(int key)=0;
+};
+SWIG_TEMPLATE_TYPEDEF(ePtr<iServiceKeys>, iServiceKeysPtr);
+
 class iPlayableService_ENUMS
 {
 #ifdef SWIG
@@ -658,6 +801,7 @@ public:
                evStart,
                evEnd,
 
+               evTunedIn,
                evTuneFailed,
 
                        /* when iServiceInformation is implemented:*/
@@ -673,10 +817,23 @@ public:
                        /* when cueSheet is implemented */
                evCuesheetChanged,
 
-                       /* when radioText is implemented */
+                       /* when rdsDecoder is implemented */
                evUpdatedRadioText,
+               evUpdatedRtpText,
+
+                       /* Radio Screenshow Support */
+               evUpdatedRassSlidePic,
+               evUpdatedRassInteractivePicMask,
 
-               evVideoSizeChanged
+               evVideoSizeChanged,
+               evVideoFramerateChanged,
+               evVideoProgressiveChanged,
+
+               evBuffering,
+
+               evStopped,
+
+               evUser = 0x100
        };
 };
 
@@ -707,7 +864,10 @@ public:
        virtual SWIG_VOID(RESULT) cueSheet(ePtr<iCueSheet> &SWIG_OUTPUT)=0;
        virtual SWIG_VOID(RESULT) subtitle(ePtr<iSubtitleOutput> &SWIG_OUTPUT)=0;
        virtual SWIG_VOID(RESULT) audioDelay(ePtr<iAudioDelay> &SWIG_OUTPUT)=0;
-       virtual SWIG_VOID(RESULT) radioText(ePtr<iRadioText> &SWIG_OUTPUT)=0;
+       virtual SWIG_VOID(RESULT) rdsDecoder(ePtr<iRdsDecoder> &SWIG_OUTPUT)=0;
+       virtual SWIG_VOID(RESULT) stream(ePtr<iStreamableService> &SWIG_OUTPUT)=0;
+       virtual SWIG_VOID(RESULT) streamed(ePtr<iStreamedService> &SWIG_OUTPUT)=0;
+       virtual SWIG_VOID(RESULT) keys(ePtr<iServiceKeys> &SWIG_OUTPUT)=0;
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<iPlayableService>, iPlayableServicePtr);
 
@@ -720,14 +880,15 @@ class iRecordableService_ENUMS
 public:
        enum {
                evStart,
-               evStop,
+               evEnd,
                evTunedIn,
                evTuneFailed,
                evRecordRunning,
                evRecordStopped,
                evNewProgramInfo,
-               evRecordFailed
-               /*evDiskFull*/
+               evRecordFailed,
+               evRecordWriteError,
+               evNewEventInfo
        };
        enum {
                NoError=0,
@@ -735,7 +896,9 @@ public:
                errNoDemuxAvailable=-2,
                errNoTsRecorderAvailable=-3,
                errDiskFull=-4,
-               errTuneFailed=-255
+               errTuneFailed=-255,
+               errMisconfiguration = -256,
+               errNoResources = -257,
        };
 };
 
@@ -750,11 +913,14 @@ public:
 #ifndef SWIG
        virtual RESULT connectEvent(const Slot2<void,iRecordableService*,int> &event, ePtr<eConnection> &connection)=0;
 #endif
-       virtual RESULT getError(int &)=0;
-       virtual RESULT prepare(const char *filename, time_t begTime=-1, time_t endTime=-1, int eit_event_id=-1)=0;
-       virtual RESULT start()=0;
+       virtual SWIG_VOID(RESULT) getError(int &SWIG_OUTPUT)=0;
+       virtual RESULT prepare(const char *filename, time_t begTime=-1, time_t endTime=-1, int eit_event_id=-1, const char *name=0, const char *descr=0, const char *tags=0)=0;
+       virtual RESULT prepareStreaming()=0;
+       virtual RESULT start(bool simulate=false)=0;
        virtual RESULT stop()=0;
        virtual SWIG_VOID(RESULT) frontendInfo(ePtr<iFrontendInformation> &SWIG_OUTPUT)=0;
+       virtual SWIG_VOID(RESULT) stream(ePtr<iStreamableService> &SWIG_OUTPUT)=0;
+       virtual SWIG_VOID(RESULT) subServices(ePtr<iSubserviceList> &SWIG_OUTPUT)=0;
 };
 SWIG_TEMPLATE_TYPEDEF(ePtr<iRecordableService>, iRecordableServicePtr);