flagDirectory=isDirectory|mustDescent|canDescent,
shouldSort=8, // should be ASCII-sorted according to service_name. great for directories.
hasSortKey=16, // has a sort key in data[3]. not having a sort key implies 0.
- sort1=32 // sort key is 1 instead of 0
+ sort1=32, // sort key is 1 instead of 0
+ isMarker=64, // Marker
+ isGroup=128 // is a group of services
};
int flags; // flags will NOT be compared.
std::string getPath() { return path; }
void setPath( const std::string &n ) { path=n; }
+ unsigned int getUnsignedData(unsigned int num) const
+ {
+ if ( num < sizeof(data)/sizeof(int) )
+ return data[num];
+ return 0;
+ }
+
int getData(unsigned int num) const
{
if ( num < sizeof(data)/sizeof(int) )
return 0;
}
+ void setUnsignedData(unsigned int num, unsigned int val)
+ {
+ if ( num < sizeof(data)/sizeof(int) )
+ data[num] = val;
+ }
+
void setData(unsigned int num, int val)
{
if ( num < sizeof(data)/sizeof(int) )
data[3]=data3;
data[4]=data4;
}
+#endif
eServiceReference(int type, int flags, const std::string &path)
: type(type), flags(flags), path(path)
{
memset(data, 0, sizeof(data));
}
-#endif
eServiceReference(const std::string &string);
std::string toString() const;
+ std::string toCompareString() const;
bool operator==(const eServiceReference &c) const
{
if (type != c.type)
extern PyObject *New_eServiceReference(const eServiceReference &ref); // defined in enigma_python.i
+#ifndef SWIG
+#ifdef PYTHON_REFCOUNT_DEBUG
+inline ePyObject Impl_New_eServiceReference(const char* file, int line, const eServiceReference &ref)
+{
+ return ePyObject(New_eServiceReference(ref), file, line);
+}
+#define NEW_eServiceReference(ref) Impl_New_eServiceReference(__FILE__, __LINE__, ref)
+#else
+inline ePyObject Impl_New_eServiceReference(const eServiceReference &ref)
+{
+ return New_eServiceReference(ref);
+}
+#define NEW_eServiceReference(ref) Impl_New_eServiceReference(ref)
+#endif
+#endif // SWIG
+
typedef long long pts_t;
/* the reason we have the servicereference as additional argument is
Hide the result only if there is another way to check for failure! */
+TEMPLATE_TYPEDEF(ePtr<eServiceEvent>, eServiceEventPtr);
+
class iStaticServiceInformation: public iObject
{
#ifdef SWIG
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 bool isPlayable(const eServiceReference &ref, const eServiceReference &ignore);
+ virtual int isPlayable(const eServiceReference &ref, const eServiceReference &ignore);
virtual int getInfo(const eServiceReference &ref, int w);
virtual std::string getInfoString(const eServiceReference &ref,int w);
+
+ virtual int setInfo(const eServiceReference &ref, int w, int v);
+ virtual int setInfoString(const eServiceReference &ref, int w, const char *v);
};
TEMPLATE_TYPEDEF(ePtr<iStaticServiceInformation>, iStaticServiceInformationPtr);
-TEMPLATE_TYPEDEF(ePtr<eServiceEvent>, eServiceEventPtr);
-
class iServiceInformation: public iObject
{
#ifdef SWIG
virtual SWIG_VOID(RESULT) getName(std::string &SWIG_OUTPUT)=0;
virtual SWIG_VOID(RESULT) getEvent(ePtr<eServiceEvent> &SWIG_OUTPUT, int nownext);
- enum {
+ enum {
sIsCrypted, /* is encrypted (no indication if decrypt was possible) */
sAspect, /* aspect ratio: 0=4:3, 1=16:9, 2=whatever we need */
sIsMultichannel, /* multichannel *available* (probably not selected) */
sProvider,
sDescription,
+ sServiceref,
sTimeCreate, // unix time or string
+
+ sTitle,
+ sArtist,
+ sAlbum,
+ sComment,
+ sTracknumber,
+ sGenre,
+ sCAIDs,
+ sVideoType, // MPEG2 MPEG4
+
+ sTags, /* space seperated list of tags */
+
+ sDVBState, /* states as defined in pmt handler (as events there) */
+
+ sVideoHeight,
+ sVideoWidth
};
- enum { resNA = -1, resIsString = -2 };
+ enum { resNA = -1, resIsString = -2, resIsPyObject = -3 };
virtual int getInfo(int w);
virtual std::string getInfoString(int w);
+ virtual PyObject *getInfoObject(int w);
+
+ virtual int setInfo(int w, int v);
+ virtual int setInfoString(int w, const char *v);
};
TEMPLATE_TYPEDEF(ePtr<iServiceInformation>, iServiceInformationPtr);
-class iFrontendStatusInformation: public iObject
+class iFrontendInformation: public iObject
{
#ifdef SWIG
- iFrontendStatusInformation();
- ~iFrontendStatusInformation();
+ iFrontendInformation();
+ ~iFrontendInformation();
#endif
public:
enum {
bitErrorRate,
signalPower,
- signalQuality
+ signalQuality,
+ lockState,
+ syncState,
+ frontendNumber
};
virtual int getFrontendInfo(int w)=0;
+ virtual PyObject *getFrontendData(bool original=false)=0;
};
-TEMPLATE_TYPEDEF(ePtr<iFrontendStatusInformation>, iFrontendStatusInformationPtr);
+TEMPLATE_TYPEDEF(ePtr<iFrontendInformation>, iFrontendInformationPtr);
class iPauseableService: public iObject
{
struct iAudioTrackInfo
{
-#ifdef SWIG
-private:
- iAudioTrackInfo();
- ~iAudioTrackInfo();
-public:
-#endif
#ifndef SWIG
std::string m_description;
std::string m_language; /* iso639 */
TEMPLATE_TYPEDEF(ePtr<iAudioTrackSelection>, iAudioTrackSelectionPtr);
+class iAudioChannelSelection: public iObject
+{
+#ifdef SWIG
+ iAudioChannelSelection();
+ ~iAudioChannelSelection();
+#endif
+public:
+ enum { LEFT, STEREO, RIGHT };
+ virtual int getCurrentChannel()=0;
+ virtual RESULT selectChannel(int i)=0;
+};
+
+TEMPLATE_TYPEDEF(ePtr<iAudioChannelSelection>, iAudioChannelSelectionPtr);
+
+class iAudioDelay: public iObject
+{
+#ifdef SWIG
+ iAudioDelay();
+ ~iAudioDelay();
+#endif
+public:
+ virtual int getAC3Delay()=0;
+ virtual int getPCMDelay()=0;
+ virtual void setAC3Delay(int)=0;
+ virtual void setPCMDelay(int)=0;
+};
+
+TEMPLATE_TYPEDEF(ePtr<iAudioDelay>, iAudioDelayPtr);
+
+class iRadioText: public iObject
+{
+#ifdef SWIG
+ iRadioText();
+ ~iRadioText();
+#endif
+public:
+ virtual std::string getRadioText(int x=0)=0;
+};
+
+TEMPLATE_TYPEDEF(ePtr<iRadioText>, iRadioTextPtr);
+
class iSubserviceList: public iObject
{
#ifdef SWIG
public:
/* returns a list of (pts, what)-tuples */
virtual PyObject *getCutList() = 0;
-
+ virtual void setCutList(SWIG_PYOBJECT(ePyObject) list) = 0;
+ virtual void setCutListEnable(int enable) = 0;
enum { cutIn = 0, cutOut = 1, cutMark = 2 };
-
- virtual RESULT addCut(const pts_t &when, int what) = 0;
- virtual RESULT removeCut(const pts_t &when, int what) = 0;
};
+TEMPLATE_TYPEDEF(ePtr<iCueSheet>, iCueSheetPtr);
+
+class eWidget;
+class PyList;
+
+class iSubtitleOutput: public iObject
+{
+public:
+ virtual RESULT enableSubtitles(eWidget *parent, SWIG_PYOBJECT(ePyObject) entry)=0;
+ virtual RESULT disableSubtitles(eWidget *parent)=0;
+ virtual PyObject *getSubtitleList()=0;
+ virtual PyObject *getCachedSubtitle()=0;
+};
+
+TEMPLATE_TYPEDEF(ePtr<iSubtitleOutput>, iSubtitleOutputPtr);
+
class iPlayableService: public iObject
{
#ifdef SWIG
evEOF,
evSOF, /* bounced against start of file (when seeking backwards) */
+
+ /* only when cueSheet is implemented */
+ evCuesheetChanged,
+
+ evUpdatedRadioText,
+
+ evVideoSizeChanged
};
+#ifndef SWIG
virtual RESULT connectEvent(const Slot2<void,iPlayableService*,int> &event, ePtr<eConnection> &connection)=0;
+#endif
virtual RESULT start()=0;
virtual RESULT stop()=0;
+ /* might have to be changed... */
+ virtual RESULT setTarget(int target)=0;
virtual SWIG_VOID(RESULT) seek(ePtr<iSeekableService> &SWIG_OUTPUT)=0;
virtual SWIG_VOID(RESULT) pause(ePtr<iPauseableService> &SWIG_OUTPUT)=0;
virtual SWIG_VOID(RESULT) info(ePtr<iServiceInformation> &SWIG_OUTPUT)=0;
virtual SWIG_VOID(RESULT) audioTracks(ePtr<iAudioTrackSelection> &SWIG_OUTPUT)=0;
+ virtual SWIG_VOID(RESULT) audioChannel(ePtr<iAudioChannelSelection> &SWIG_OUTPUT)=0;
virtual SWIG_VOID(RESULT) subServices(ePtr<iSubserviceList> &SWIG_OUTPUT)=0;
- virtual SWIG_VOID(RESULT) frontendStatusInfo(ePtr<iFrontendStatusInformation> &SWIG_OUTPUT)=0;
+ virtual SWIG_VOID(RESULT) frontendInfo(ePtr<iFrontendInformation> &SWIG_OUTPUT)=0;
virtual SWIG_VOID(RESULT) timeshift(ePtr<iTimeshiftService> &SWIG_OUTPUT)=0;
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;
};
TEMPLATE_TYPEDEF(ePtr<iPlayableService>, iPlayableServicePtr);
~iRecordableService();
#endif
public:
- virtual RESULT prepare(const char *filename)=0;
+ enum
+ {
+ evStart,
+ evStop,
+ evTunedIn,
+ evTuneFailed,
+ evRecordRunning,
+ evRecordStopped,
+ evNewProgramInfo,
+ evRecordFailed
+// evDiskFull
+ };
+ enum
+ {
+ NoError=0,
+ errOpenRecordFile=-1,
+ errNoDemuxAvailable=-2,
+ errNoTsRecorderAvailable=-3,
+ errDiskFull=-4,
+ errTuneFailed=-255
+ };
+#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 RESULT stop()=0;
+ virtual SWIG_VOID(RESULT) frontendInfo(ePtr<iFrontendInformation> &SWIG_OUTPUT)=0;
};
TEMPLATE_TYPEDEF(ePtr<iRecordableService>, iRecordableServicePtr);
+extern PyObject *New_iRecordableServicePtr(const ePtr<iRecordableService> &ref); // defined in enigma_python.i
+
+inline PyObject *PyFrom(ePtr<iRecordableService> &c)
+{
+ return New_iRecordableServicePtr(c);
+}
+
+#ifndef SWIG
+#ifdef PYTHON_REFCOUNT_DEBUG
+inline ePyObject Impl_New_iRecordableServicePtr(const char* file, int line, const ePtr<iRecordableService> &ptr)
+{
+ return ePyObject(New_iRecordableServicePtr(ptr), file, line);
+}
+#define NEW_iRecordableServicePtr(ptr) Impl_New_iRecordableServicePtr(__FILE__, __LINE__, ptr)
+#else
+inline ePyObject Impl_New_iRecordableServicePtr(const ePtr<iRecordableService> &ptr)
+{
+ return New_iRecordableServicePtr(ptr);
+}
+#define NEW_iRecordableServicePtr(ptr) Impl_New_iRecordableServicePtr(ptr)
+#endif
+#endif // SWIG
+
// TEMPLATE_TYPEDEF(std::list<eServiceReference>, eServiceReferenceList);
class iMutableServiceList: public iObject
/* flush changes */
virtual RESULT flushChanges()=0;
/* adds a service to a list */
- virtual RESULT addService(eServiceReference &ref)=0;
+ virtual RESULT addService(eServiceReference &ref, eServiceReference before=eServiceReference())=0;
/* removes a service from a list */
virtual RESULT removeService(eServiceReference &ref)=0;
/* moves a service in a list, only if list suppports a specific sort method. */
~iListableService();
#endif
public:
+#ifndef SWIG
/* legacy interface: get a list */
virtual RESULT getContent(std::list<eServiceReference> &list, bool sorted=false)=0;
- virtual RESULT getContent(PyObject *list, bool sorted=false)=0;
+#endif
+ virtual PyObject *getContent(const char* format, bool sorted=false)=0;
/* new, shiny interface: streaming. */
virtual SWIG_VOID(RESULT) getNext(eServiceReference &SWIG_OUTPUT)=0;