add support for cyclic garbage collection to eTimer and eSocketNotifier
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Thu, 14 Feb 2008 19:44:14 +0000 (19:44 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Thu, 14 Feb 2008 19:44:14 +0000 (19:44 +0000)
class, add simpler method to set a timer callback.. or remove.. instead of
timer.timeout.get().append(func).. or .remove(func)... now it is possible to
do timer.callback.append(func)... timer.callback.remove(func) (the old
method still works..but is now deprecated)

41 files changed:
lib/base/ebase.cpp
lib/base/ebase.h
lib/python/Components/Clock.py
lib/python/Components/ConditionalWidget.py
lib/python/Components/ConfigList.py
lib/python/Components/Converter/ConditionalShowHide.py
lib/python/Components/Converter/Poll.py
lib/python/Components/PerServiceDisplay.py
lib/python/Components/Pixmap.py
lib/python/Components/ServicePosition.py
lib/python/Components/Sources/Boolean.py
lib/python/Components/Sources/Clock.py
lib/python/Components/Sources/FrontendStatus.py
lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py
lib/python/Plugins/Extensions/MediaPlayer/plugin.py
lib/python/Plugins/Extensions/PicturePlayer/plugin.py
lib/python/Plugins/Extensions/SimpleRSS/plugin.py
lib/python/Plugins/SystemPlugins/OldSoftwareUpdate/plugin.py
lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py
lib/python/Plugins/SystemPlugins/SoftwareUpdate/plugin.py
lib/python/Plugins/SystemPlugins/Videomode/VideoHardware.py
lib/python/Screens/ChannelSelection.py
lib/python/Screens/Ci.py
lib/python/Screens/EventView.py
lib/python/Screens/HarddiskSetup.py
lib/python/Screens/InfoBar.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/Ipkg.py
lib/python/Screens/MessageBox.py
lib/python/Screens/MovieSelection.py
lib/python/Screens/ParentalControlSetup.py
lib/python/Screens/ScanSetup.py
lib/python/Screens/SubservicesQuickzap.py
lib/python/Screens/Wizard.py
lib/python/Tools/NumericalTextInput.py
lib/python/enigma_python.i
lib/python/python.cpp
lib/python/python.h
mytest.py
tests/enigma.py
timer.py

index effd725..bf41dc0 100644 (file)
@@ -390,3 +390,420 @@ void eMainloop::applyTimeOffset()
 }
 
 eApplication* eApp = 0;
 }
 
 eApplication* eApp = 0;
+
+#include "structmember.h"
+
+extern "C" {
+
+// eTimer replacement
+
+struct eTimerPy
+{
+       PyObject_HEAD
+       eTimer *tm;
+       PyObject *in_weakreflist; /* List of weak references */
+};
+
+static int
+eTimerPy_traverse(eTimerPy *self, visitproc visit, void *arg)
+{
+       PyObject *obj = self->tm->timeout.get();
+       Py_VISIT(obj);
+       return 0;
+}
+
+static int
+eTimerPy_clear(eTimerPy *self)
+{
+       PyObject *obj = self->tm->timeout.get();
+       Py_CLEAR(obj);
+       return 0;
+}
+
+static void
+eTimerPy_dealloc(eTimerPy* self)
+{
+       if (self->in_weakreflist != NULL)
+               PyObject_ClearWeakRefs((PyObject *) self);
+       eTimerPy_clear(self);
+       delete self->tm;
+       self->ob_type->tp_free((PyObject*)self);
+}
+
+static PyObject *
+eTimerPy_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+       eTimerPy *self = (eTimerPy *)type->tp_alloc(type, 0);
+       self->tm = new eTimer(eApp);
+       self->in_weakreflist = NULL;
+       return (PyObject *)self;
+}
+
+static PyObject *
+eTimerPy_is_active(eTimerPy* self)
+{
+       PyObject *ret = NULL;
+       ret = !!self->tm->isActive() ? Py_True : Py_False;
+       Org_Py_INCREF(ret);
+       return ret;
+}
+
+static PyObject *
+eTimerPy_start(eTimerPy* self, PyObject *args)
+{
+       long v=0;
+       long singleShot=0;
+       if (PyTuple_Size(args) > 1)
+       {
+               if (!PyArg_ParseTuple(args, "ll", &v, &singleShot)) // when 2nd arg is a value
+               {
+                       PyObject *obj=0;
+                       if (!PyArg_ParseTuple(args, "lO", &v, &obj)) // get 2nd arg as python object
+                               return NULL;
+                       else if (obj == Py_True)
+                               singleShot=1;
+                       else if (obj != Py_False)
+                               return NULL;
+               }
+       }
+       else if (!PyArg_ParseTuple(args, "l", &v))
+               return NULL;
+       self->tm->start(v, singleShot);
+       Py_RETURN_NONE;
+}
+
+static PyObject *
+eTimerPy_start_long(eTimerPy* self, PyObject *args)
+{
+       long v=0;
+       if (!PyArg_ParseTuple(args, "l", &v)) {
+               return NULL;
+       }
+       self->tm->startLongTimer(v);
+       Py_RETURN_NONE;
+}
+
+static PyObject *
+eTimerPy_change_interval(eTimerPy* self, PyObject *args)
+{
+       long v=0;
+       if (!PyArg_ParseTuple(args, "l", &v)) {
+               return NULL;
+       }
+       self->tm->changeInterval(v);
+       Py_RETURN_NONE;
+}
+
+static PyObject *
+eTimerPy_stop(eTimerPy* self)
+{
+       self->tm->stop();
+       Py_RETURN_NONE;
+}
+
+static PyObject *
+eTimerPy_get_callback_list(eTimerPy *self)
+{ //used for compatibilty with the old eTimer
+       return self->tm->timeout.get();
+}
+
+static PyMethodDef eTimerPy_methods[] = {
+       {"isActive", (PyCFunction)eTimerPy_is_active, METH_NOARGS,
+        "returns the timer state"
+       },
+       {"start", (PyCFunction)eTimerPy_start, METH_VARARGS,
+        "start timer with interval in msecs"
+       },
+       {"startLongTimer", (PyCFunction)eTimerPy_start_long, METH_VARARGS,
+        "start timer with interval in secs"
+       },
+       {"changeInterval", (PyCFunction)eTimerPy_change_interval, METH_VARARGS,
+        "change interval of a timer (in msecs)"
+       },
+       {"stop", (PyCFunction)eTimerPy_stop, METH_NOARGS,
+        "stops the timer"
+       },
+       //used for compatibilty with the old eTimer
+       {"get", (PyCFunction)eTimerPy_get_callback_list, METH_NOARGS,
+        "get timeout callback list"
+       },
+       {NULL}  /* Sentinel */
+};
+
+static PyObject *
+eTimerPy_get_cb_list(eTimerPy *self, void *closure)
+{
+       return self->tm->timeout.get();
+}
+
+static PyObject *
+eTimerPy_timeout(eTimerPy *self, void *closure) 
+{ //used for compatibilty with the old eTimer
+       Org_Py_INCREF((PyObject*)self);
+       return (PyObject*)self;
+}
+
+static PyGetSetDef eTimerPy_getseters[] = {
+       {"callback",
+        (getter)eTimerPy_get_cb_list, (setter)0,
+        "returns the callback python list",
+        NULL},
+
+       {"timeout", //used for compatibilty with the old eTimer
+        (getter)eTimerPy_timeout, (setter)0,
+        "synonym for our self",
+        NULL},
+
+       {NULL} /* Sentinel */
+};
+
+static PyTypeObject eTimerPyType = {
+       PyObject_HEAD_INIT(NULL)
+       0, /*ob_size*/
+       "eBaseImpl.eTimer", /*tp_name*/
+       sizeof(eTimerPy), /*tp_basicsize*/
+       0, /*tp_itemsize*/
+       (destructor)eTimerPy_dealloc, /*tp_dealloc*/
+       0, /*tp_print*/
+       0, /*tp_getattr*/
+       0, /*tp_setattr*/
+       0, /*tp_compare*/
+       0, /*tp_repr*/
+       0, /*tp_as_number*/
+       0, /*tp_as_sequence*/
+       0, /*tp_as_mapping*/
+       0, /*tp_hash */
+       0, /*tp_call*/
+       0, /*tp_str*/
+       0, /*tp_getattro*/
+       0, /*tp_setattro*/
+       0, /*tp_as_buffer*/
+       Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+       "eTimer objects", /* tp_doc */
+       (traverseproc)eTimerPy_traverse, /* tp_traverse */
+       (inquiry)eTimerPy_clear, /* tp_clear */
+       0, /* tp_richcompare */
+       offsetof(eTimerPy, in_weakreflist), /* tp_weaklistoffset */
+       0, /* tp_iter */
+       0, /* tp_iternext */
+       eTimerPy_methods, /* tp_methods */
+       0, /* tp_members */
+       eTimerPy_getseters, /* tp_getset */
+       0, /* tp_base */
+       0, /* tp_dict */
+       0, /* tp_descr_get */
+       0, /* tp_descr_set */
+       0, /* tp_dictoffset */
+       0, /* tp_init */
+       0, /* tp_alloc */
+       eTimerPy_new, /* tp_new */
+};
+
+// eSocketNotifier replacement
+
+struct eSocketNotifierPy
+{
+       PyObject_HEAD
+       eSocketNotifier *sn;
+       PyObject *in_weakreflist; /* List of weak references */
+};
+
+static int
+eSocketNotifierPy_traverse(eSocketNotifierPy *self, visitproc visit, void *arg)
+{
+       PyObject *obj = self->sn->activated.get();
+       Py_VISIT(obj);
+       return 0;
+}
+
+static int
+eSocketNotifierPy_clear(eSocketNotifierPy *self)
+{
+       PyObject *obj = self->sn->activated.get();
+       Py_CLEAR(obj);
+       return 0;
+}
+
+static void
+eSocketNotifierPy_dealloc(eSocketNotifierPy* self)
+{
+       if (self->in_weakreflist != NULL)
+               PyObject_ClearWeakRefs((PyObject *) self);
+       eSocketNotifierPy_clear(self);
+       delete self->sn;
+       self->ob_type->tp_free((PyObject*)self);
+}
+
+static PyObject *
+eSocketNotifierPy_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+       eSocketNotifierPy *self = (eSocketNotifierPy *)type->tp_alloc(type, 0);
+       int fd, req, immediate_start = 1, size = PyTuple_Size(args);
+       if (size > 2)
+       {
+               if (!PyArg_ParseTuple(args, "iii", &fd, &req, &immediate_start))
+               {
+                       PyObject *obj = NULL;
+                       if (!PyArg_ParseTuple(args, "iiO", &fd, &req, &immediate_start))
+                               return NULL;
+                       if (obj == Py_False)
+                               immediate_start = 0;
+                       else if (obj != Py_True)
+                               return NULL;
+               }
+       }
+       else if (size < 2 || !PyArg_ParseTuple(args, "ii", &fd, &req))
+               return NULL;
+       self->sn = new eSocketNotifier(eApp, fd, req, immediate_start);
+       self->in_weakreflist = NULL;
+       return (PyObject *)self;
+}
+
+static PyObject *
+eSocketNotifierPy_is_running(eSocketNotifierPy* self)
+{
+       PyObject *ret = self->sn->isRunning() ? Py_True : Py_False;
+       Org_Py_INCREF(ret);
+       return ret;
+}
+
+static PyObject *
+eSocketNotifierPy_start(eSocketNotifierPy* self)
+{
+       self->sn->start();
+       Py_RETURN_NONE;
+}
+
+static PyObject *
+eSocketNotifierPy_stop(eSocketNotifierPy* self)
+{
+       self->sn->stop();
+       Py_RETURN_NONE;
+}
+
+static PyObject *
+eSocketNotifierPy_get_fd(eSocketNotifierPy* self)
+{
+       return PyInt_FromLong(self->sn->getFD());
+}
+
+static PyObject *
+eSocketNotifierPy_get_requested(eSocketNotifierPy* self)
+{
+       return PyInt_FromLong(self->sn->getRequested());
+}
+
+static PyObject *
+eSocketNotifierPy_set_requested(eSocketNotifierPy* self, PyObject *args)
+{
+       int req;
+       if (PyTuple_Size(args) != 1 || !PyArg_ParseTuple(args, "i", &req))
+               return NULL;
+       self->sn->setRequested(req);
+       Py_RETURN_NONE;
+}
+
+static PyMethodDef eSocketNotifierPy_methods[] = {
+       {"isRunning", (PyCFunction)eSocketNotifierPy_is_running, METH_NOARGS,
+        "returns the running state"
+       },
+       {"start", (PyCFunction)eSocketNotifierPy_start, METH_NOARGS,
+        "start the sn"
+       },
+       {"stop", (PyCFunction)eSocketNotifierPy_stop, METH_NOARGS,
+        "stops the sn"
+       },
+       {"getFD", (PyCFunction)eSocketNotifierPy_get_fd, METH_NOARGS,
+        "get file descriptor"
+       },
+       {"getRequested", (PyCFunction)eSocketNotifierPy_get_requested, METH_NOARGS,
+        "get requested"
+       },
+       {"setRequested", (PyCFunction)eSocketNotifierPy_set_requested, METH_VARARGS,
+        "set requested"
+       },
+       {NULL}  /* Sentinel */
+};
+
+static PyObject *
+eSocketNotifierPy_get_cb_list(eSocketNotifierPy *self, void *closure)
+{
+       return self->sn->activated.get();
+}
+
+static PyGetSetDef eSocketNotifierPy_getseters[] = {
+       {"callback",
+        (getter)eSocketNotifierPy_get_cb_list, (setter)0,
+        "returns the callback python list",
+        NULL},
+       {NULL} /* Sentinel */
+};
+
+static PyTypeObject eSocketNotifierPyType = {
+       PyObject_HEAD_INIT(NULL)
+       0, /*ob_size*/
+       "eBaseImpl.eSocketNotifier", /*tp_name*/
+       sizeof(eSocketNotifierPy), /*tp_basicsize*/
+       0, /*tp_itemsize*/
+       (destructor)eSocketNotifierPy_dealloc, /*tp_dealloc*/
+       0, /*tp_print*/
+       0, /*tp_getattr*/
+       0, /*tp_setattr*/
+       0, /*tp_compare*/
+       0, /*tp_repr*/
+       0, /*tp_as_number*/
+       0, /*tp_as_sequence*/
+       0, /*tp_as_mapping*/
+       0, /*tp_hash */
+       0, /*tp_call*/
+       0, /*tp_str*/
+       0, /*tp_getattro*/
+       0, /*tp_setattro*/
+       0, /*tp_as_buffer*/
+       Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+       "eTimer objects", /* tp_doc */
+       (traverseproc)eSocketNotifierPy_traverse, /* tp_traverse */
+       (inquiry)eSocketNotifierPy_clear, /* tp_clear */
+       0, /* tp_richcompare */
+       offsetof(eSocketNotifierPy, in_weakreflist), /* tp_weaklistoffset */
+       0, /* tp_iter */
+       0, /* tp_iternext */
+       eSocketNotifierPy_methods, /* tp_methods */
+       0, /* tp_members */
+       eSocketNotifierPy_getseters, /* tp_getset */
+       0, /* tp_base */
+       0, /* tp_dict */
+       0, /* tp_descr_get */
+       0, /* tp_descr_set */
+       0, /* tp_dictoffset */
+       0, /* tp_init */
+       0, /* tp_alloc */
+       eSocketNotifierPy_new, /* tp_new */
+};
+
+static PyMethodDef module_methods[] = {
+       {NULL}  /* Sentinel */
+};
+
+void eBaseInit(void)
+{
+       PyObject* m;
+
+       m = Py_InitModule3("eBaseImpl", module_methods,
+               "Module that implements some enigma classes with working cyclic garbage collection.");
+
+       if (m == NULL)
+               return;
+
+       if (!PyType_Ready(&eTimerPyType))
+       {
+               Org_Py_INCREF((PyObject*)&eTimerPyType);
+               PyModule_AddObject(m, "eTimer", (PyObject*)&eTimerPyType);
+       }
+       if (!PyType_Ready(&eSocketNotifierPyType))
+       {
+               Org_Py_INCREF((PyObject*)&eSocketNotifierPyType);
+               PyModule_AddObject(m, "eSocketNotifier", (PyObject*)&eSocketNotifierPyType);
+       }
+}
+}
index 4378711..c4dab62 100644 (file)
@@ -132,8 +132,6 @@ static inline long timeout_usec ( const timeval & orig )
        return (orig-now).tv_sec*1000000 + (orig-now).tv_usec;
 }
 
        return (orig-now).tv_sec*1000000 + (orig-now).tv_usec;
 }
 
-#endif
-
 class eMainloop;
 
                                        // die beiden signalquellen: SocketNotifier...
 class eMainloop;
 
                                        // die beiden signalquellen: SocketNotifier...
@@ -154,6 +152,7 @@ private:
        int fd;
        int state;
        int requested;          // requested events (POLLIN, ...)
        int fd;
        int state;
        int requested;          // requested events (POLLIN, ...)
+       void activate(int what) { /*emit*/ activated(what); }
 public:
        /**
         * \brief Constructs a eSocketNotifier.
 public:
        /**
         * \brief Constructs a eSocketNotifier.
@@ -166,7 +165,6 @@ public:
        ~eSocketNotifier();
 
        PSignal1<void, int> activated;
        ~eSocketNotifier();
 
        PSignal1<void, int> activated;
-       void activate(int what) { /*emit*/ activated(what); }
 
        void start();
        void stop();
 
        void start();
        void stop();
@@ -177,6 +175,8 @@ public:
        void setRequested(int req) { requested=req; }
 };
 
        void setRequested(int req) { requested=req; }
 };
 
+#endif
+
 class eTimer;
 
                        // werden in einer mainloop verarbeitet
 class eTimer;
 
                        // werden in einer mainloop verarbeitet
@@ -265,6 +265,7 @@ public:
        }
 };
 
        }
 };
 
+#ifndef SWIG
                                // ... und Timer
 /**
  * \brief Gives a callback after a specified timeout.
                                // ... und Timer
 /**
  * \brief Gives a callback after a specified timeout.
@@ -280,6 +281,7 @@ class eTimer
        bool bSingleShot;
        bool bActive;
        void addTimeOffset(int);
        bool bSingleShot;
        bool bActive;
        void addTimeOffset(int);
+       void activate();
 public:
        /**
         * \brief Constructs a timer.
 public:
        /**
         * \brief Constructs a timer.
@@ -291,17 +293,17 @@ public:
        ~eTimer() { if (bActive) stop(); }
 
        PSignal0<void> timeout;
        ~eTimer() { if (bActive) stop(); }
 
        PSignal0<void> timeout;
-       void activate();
 
        bool isActive() { return bActive; }
 
        bool isActive() { return bActive; }
+
        timeval &getNextActivation() { return nextActivation; }
 
        void start(long msec, bool b=false);
        void stop();
        void changeInterval(long msek);
        timeval &getNextActivation() { return nextActivation; }
 
        void start(long msec, bool b=false);
        void stop();
        void changeInterval(long msek);
-#ifndef SWIG
-       bool operator<(const eTimer& t) const { return nextActivation < t.nextActivation; }
-#endif
        void startLongTimer( int seconds );
        void startLongTimer( int seconds );
+       bool operator<(const eTimer& t) const { return nextActivation < t.nextActivation; }
 };
 };
+#endif  // SWIG
+
 #endif
 #endif
index ddd6ffb..338101e 100644 (file)
@@ -14,7 +14,7 @@ class Clock(VariableText, HTMLComponent, GUIComponent):
                self.doClock()
                
                self.clockTimer = eTimer()
                self.doClock()
                
                self.clockTimer = eTimer()
-               self.clockTimer.timeout.get().append(self.doClock)
+               self.clockTimer.callback.append(self.doClock)
 
        def onShow(self):
                self.doClock()
 
        def onShow(self):
                self.doClock()
index f4b9983..192813f 100644 (file)
@@ -9,7 +9,7 @@ class ConditionalWidget(GUIComponent):
                
                if (withTimer):
                        self.conditionCheckTimer = eTimer()
                
                if (withTimer):
                        self.conditionCheckTimer = eTimer()
-                       self.conditionCheckTimer.timeout.get().append(self.update)
+                       self.conditionCheckTimer.callback.append(self.update)
                        self.conditionCheckTimer.start(1000)
 
        def postWidgetCreate(self, instance):
                        self.conditionCheckTimer.start(1000)
 
        def postWidgetCreate(self, instance):
@@ -38,7 +38,7 @@ class BlinkingWidget(GUIComponent):
                self.blinking = False
                self.setBlinkTime(500)
                self.timer = eTimer()
                self.blinking = False
                self.setBlinkTime(500)
                self.timer = eTimer()
-               self.timer.timeout.get().append(self.blink)
+               self.timer.callback.append(self.blink)
        
        def setBlinkTime(self, time):
                self.blinktime = time
        
        def setBlinkTime(self, time):
                self.blinktime = time
index f42d6a9..d1b295b 100644 (file)
@@ -19,7 +19,7 @@ class ConfigList(HTMLComponent, GUIComponent, object):
        def execBegin(self):
                rcinput = eRCInput.getInstance()
                rcinput.setKeyboardMode(rcinput.kmAscii)
        def execBegin(self):
                rcinput = eRCInput.getInstance()
                rcinput.setKeyboardMode(rcinput.kmAscii)
-               self.timer.timeout.get().append(self.timeout)
+               self.timer.callback.append(self.timeout)
 
        def execEnd(self):
                rcinput = eRCInput.getInstance()
 
        def execEnd(self):
                rcinput = eRCInput.getInstance()
index 50e8b1a..f5ec703 100644 (file)
@@ -10,8 +10,8 @@ class ConditionalShowHide(Converter, object):
                if self.blink:
                        self.blinktime = 500
                        self.timer = eTimer()
                if self.blink:
                        self.blinktime = 500
                        self.timer = eTimer()
-                       self.timer.timeout.get().append(self.blinkFunc)
-               else:
+                       self.timer.callback.append(self.blinkFunc)
+               else
                        self.timer = None
 
        def blinkFunc(self):
                        self.timer = None
 
        def blinkFunc(self):
index f41765d..33b9f30 100644 (file)
@@ -3,7 +3,7 @@ from enigma import eTimer
 class Poll(object):
        def __init__(self):
                self.__poll_timer = eTimer()
 class Poll(object):
        def __init__(self):
                self.__poll_timer = eTimer()
-               self.__poll_timer.timeout.get().append(self.poll)
+               self.__poll_timer.callback.append(self.poll)
                self.__interval = 1000
                self.__enabled = False
 
                self.__interval = 1000
                self.__enabled = False
 
index 6e02cce..2d0a71e 100644 (file)
@@ -11,7 +11,7 @@ class PerServiceBase(object):
                self.navcore = navcore
                self.navcore.event.append(self.event_callback)
                self.poll_timer = eTimer()
                self.navcore = navcore
                self.navcore.event.append(self.event_callback)
                self.poll_timer = eTimer()
-               self.poll_timer.timeout.get().append(self.poll)
+               self.poll_timer.callback.append(self.poll)
                self.with_event = with_event
                
                # start with stopped state, so simulate that
                self.with_event = with_event
                
                # start with stopped state, so simulate that
index 3cc8c66..f6ecaf0 100644 (file)
@@ -24,7 +24,7 @@ class MovingPixmap(Pixmap):
                self.clearPath()
                
                self.moveTimer = eTimer()
                self.clearPath()
                
                self.moveTimer = eTimer()
-               self.moveTimer.timeout.get().append(self.doMove)
+               self.moveTimer.callback.append(self.doMove)
                
        def clearPath(self, repeated = False):
                if (self.moving):
                
        def clearPath(self, repeated = False):
                if (self.moving):
index 6f7082d..985f884 100644 (file)
@@ -12,7 +12,7 @@ class ServicePosition(PerServiceDisplay, object):
        def __init__(self, navcore, type):
                object.__init__(self)
                self.updateTimer = eTimer()
        def __init__(self, navcore, type):
                object.__init__(self)
                self.updateTimer = eTimer()
-               self.updateTimer.timeout.get().append(self.update)
+               self.updateTimer.callback.append(self.update)
                PerServiceDisplay.__init__(self, navcore,
                        {
                                iPlayableService.evStart: self.newService,
                PerServiceDisplay.__init__(self, navcore,
                        {
                                iPlayableService.evStart: self.newService,
index 21c2c2b..97b92bc 100644 (file)
@@ -16,7 +16,7 @@ class Boolean(Source, object):
                self.fixed = fixed
                if poll > 0:
                        self.poll_timer = eTimer()
                self.fixed = fixed
                if poll > 0:
                        self.poll_timer = eTimer()
-                       self.poll_timer.timeout.get().append(self.poll)
+                       self.poll_timer.callback.append(self.poll)
                        self.poll_timer.start(poll)
                else:
                        self.poll_timer = None
                        self.poll_timer.start(poll)
                else:
                        self.poll_timer = None
index b59a20d..60fa7ac 100644 (file)
@@ -8,7 +8,7 @@ class Clock(Source):
        def __init__(self):
                Source.__init__(self)
                self.clock_timer = eTimer()
        def __init__(self):
                Source.__init__(self)
                self.clock_timer = eTimer()
-               self.clock_timer.timeout.get().append(self.poll)
+               self.clock_timer.callback.append(self.poll)
                self.clock_timer.start(1000)
 
        @cached
                self.clock_timer.start(1000)
 
        @cached
index 4d38f75..141bd8a 100644 (file)
@@ -9,7 +9,7 @@ class FrontendStatus(Source):
                self.frontend_source = frontend_source
                self.invalidate()
                self.poll_timer = eTimer()
                self.frontend_source = frontend_source
                self.invalidate()
                self.poll_timer = eTimer()
-               self.poll_timer.timeout.get().append(self.updateFrontendStatus)
+               self.poll_timer.callback.append(self.updateFrontendStatus)
                self.poll_timer.start(update_interval)
 
        def invalidate(self):
                self.poll_timer.start(update_interval)
 
        def invalidate(self):
index 4f31fa4..80a07df 100644 (file)
@@ -380,7 +380,7 @@ class GraphMultiEPG(Screen):
                        },-1)
 
                self.updateTimelineTimer = eTimer()
                        },-1)
 
                self.updateTimelineTimer = eTimer()
-               self.updateTimelineTimer.timeout.get().append(self.moveTimeLines)
+               self.updateTimelineTimer.callback.append(self.moveTimeLines)
                self.updateTimelineTimer.start(60*1000)
                self.onLayoutFinish.append(self.onCreate)
 
                self.updateTimelineTimer.start(60*1000)
                self.onLayoutFinish.append(self.onCreate)
 
index 63e2b30..03d7617 100644 (file)
@@ -159,11 +159,11 @@ class MediaPlayer(Screen, InfoBarSeek, InfoBarAudioSelection, InfoBarCueSheetSup
 
                self.righttimer = False
                self.rightKeyTimer = eTimer()
 
                self.righttimer = False
                self.rightKeyTimer = eTimer()
-               self.rightKeyTimer.timeout.get().append(self.rightTimerFire)
+               self.rightKeyTimer.callback.append(self.rightTimerFire)
 
                self.lefttimer = False
                self.leftKeyTimer = eTimer()
 
                self.lefttimer = False
                self.leftKeyTimer = eTimer()
-               self.leftKeyTimer.timeout.get().append(self.leftTimerFire)
+               self.leftKeyTimer.callback.append(self.leftTimerFire)
 
                self.currList = "filelist"
 
 
                self.currList = "filelist"
 
index b305b65..6d41305 100644 (file)
@@ -94,7 +94,7 @@ class ThumbView(Screen):
                        self["label0"].setText(_("no Picture found"))
                
                self.ThumbTimer = eTimer()
                        self["label0"].setText(_("no Picture found"))
                
                self.ThumbTimer = eTimer()
-               self.ThumbTimer.timeout.get().append(self.showThumb)
+               self.ThumbTimer.callback.append(self.showThumb)
 
                self.fillPage()
                
 
                self.fillPage()
                
@@ -244,11 +244,11 @@ class PicView(Screen):
                self["pause"] = Pixmap()
                
                self.decodeTimer = eTimer()
                self["pause"] = Pixmap()
                
                self.decodeTimer = eTimer()
-               self.decodeTimer.timeout.get().append(self.decodePic)
+               self.decodeTimer.callback.append(self.decodePic)
                self.decodeTimer.start(300, True)
 
                self.slideTimer = eTimer()
                self.decodeTimer.start(300, True)
 
                self.slideTimer = eTimer()
-               self.slideTimer.timeout.get().append(self.slidePic)
+               self.slideTimer.callback.append(self.slidePic)
                
                
        def Pause(self):
                
                
        def Pause(self):
@@ -457,7 +457,7 @@ class picmain(Screen):
                self["thumbnail"] = Pixmap()
                
                self.ThumbTimer = eTimer()
                self["thumbnail"] = Pixmap()
                
                self.ThumbTimer = eTimer()
-               self.ThumbTimer.timeout.get().append(self.showThumb)
+               self.ThumbTimer.callback.append(self.showThumb)
                self.ThumbTimer.start(500, True)
                
        def up(self):
                self.ThumbTimer.start(500, True)
                
        def up(self):
index b521835..3c96dd4 100644 (file)
@@ -139,7 +139,7 @@ class RSSPoller:
 
        def __init__(self):
                self.poll_timer = eTimer()
 
        def __init__(self):
                self.poll_timer = eTimer()
-               self.poll_timer.timeout.get().append(self.poll)
+               self.poll_timer.callback.append(self.poll)
                self.poll_timer.start(0, 1)
                self.last_links = Set()
                self.dialog = None
                self.poll_timer.start(0, 1)
                self.last_links = Set()
                self.dialog = None
index 17abb0f..c721638 100644 (file)
@@ -30,7 +30,7 @@ class Upgrade(Screen):
                
                self.update = True
                self.delayTimer = eTimer()
                
                self.update = True
                self.delayTimer = eTimer()
-               self.delayTimer.timeout.get().append(self.doUpdateDelay)
+               self.delayTimer.callback.append(self.doUpdateDelay)
                
        def go(self):
                if self.update:
                
        def go(self):
                if self.update:
index e394db4..1f22204 100644 (file)
@@ -123,7 +123,7 @@ class PositionerSetup(Screen):
                self.updateColors("tune")
                
                self.statusTimer = eTimer()
                self.updateColors("tune")
                
                self.statusTimer = eTimer()
-               self.statusTimer.timeout.get().append(self.updateStatus)
+               self.statusTimer.callback.append(self.updateStatus)
                self.statusTimer.start(50, False)
 
        def restartPrevService(self, yesno):
                self.statusTimer.start(50, False)
 
        def restartPrevService(self, yesno):
index c0fbe74..8127514 100644 (file)
@@ -268,7 +268,7 @@ class UpdatePlugin(Screen):
                
                self.activity = 0
                self.activityTimer = eTimer()
                
                self.activity = 0
                self.activityTimer = eTimer()
-               self.activityTimer.timeout.get().append(self.doActivityTimer)
+               self.activityTimer.callback.append(self.doActivityTimer)
                self.activityTimer.start(100, False)
                                
                self.ipkg = IpkgComponent()
                self.activityTimer.start(100, False)
                                
                self.ipkg = IpkgComponent()
index c6d6b86..9defb9e 100644 (file)
@@ -66,7 +66,7 @@ class VideoHardware:
 
                # until we have the hotplug poll socket
 #              self.timer = eTimer()
 
                # until we have the hotplug poll socket
 #              self.timer = eTimer()
-#              self.timer.timeout.get().append(self.readPreferredModes)
+#              self.timer.callback.append(self.readPreferredModes)
 #              self.timer.start(1000)
 
        def readAvailableModes(self):
 #              self.timer.start(1000)
 
        def readAvailableModes(self):
index e1402ae..d640ac2 100644 (file)
@@ -1,28 +1,39 @@
+from Tools.Profile import profile
+
 from Screen import Screen
 from Components.Button import Button
 from Components.ServiceList import ServiceList
 from Components.ActionMap import NumberActionMap, ActionMap, HelpableActionMap
 from Components.MenuList import MenuList
 from Components.ServiceEventTracker import ServiceEventTracker
 from Screen import Screen
 from Components.Button import Button
 from Components.ServiceList import ServiceList
 from Components.ActionMap import NumberActionMap, ActionMap, HelpableActionMap
 from Components.MenuList import MenuList
 from Components.ServiceEventTracker import ServiceEventTracker
+profile("ChannelSelection.py 1")
 from EpgSelection import EPGSelection
 from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode
 from Components.config import config, ConfigSubsection, ConfigText
 from Tools.NumericalTextInput import NumericalTextInput
 from EpgSelection import EPGSelection
 from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode
 from Components.config import config, ConfigSubsection, ConfigText
 from Tools.NumericalTextInput import NumericalTextInput
+profile("ChannelSelection.py 2")
 from Components.NimManager import nimmanager
 from Components.NimManager import nimmanager
+profile("ChannelSelection.py 2.1")
 from Components.Sources.Source import ObsoleteSource
 from Components.Sources.Source import ObsoleteSource
+profile("ChannelSelection.py 2.2")
 from Components.Sources.RdsDecoder import RdsDecoder
 from Components.Sources.RdsDecoder import RdsDecoder
+profile("ChannelSelection.py 2.3")
 from Components.Sources.ServiceEvent import ServiceEvent
 from Components.Sources.ServiceEvent import ServiceEvent
+profile("ChannelSelection.py 2.4")
 from Components.Input import Input
 from Components.Input import Input
+profile("ChannelSelection.py 3")
 from Components.ParentalControl import parentalControl
 from Components.Pixmap import Pixmap
 from Screens.InputBox import InputBox, PinInput
 from Screens.MessageBox import MessageBox
 from Screens.ServiceInfo import ServiceInfo
 from Components.ParentalControl import parentalControl
 from Components.Pixmap import Pixmap
 from Screens.InputBox import InputBox, PinInput
 from Screens.MessageBox import MessageBox
 from Screens.ServiceInfo import ServiceInfo
+profile("ChannelSelection.py 4")
 from Screens.RdsDisplay import RassInteractive
 from ServiceReference import ServiceReference
 from Tools.BoundFunction import boundFunction
 from re import compile
 from os import remove
 from Screens.RdsDisplay import RassInteractive
 from ServiceReference import ServiceReference
 from Tools.BoundFunction import boundFunction
 from re import compile
 from os import remove
+profile("ChannelSelection.py after imports")
 
 FLAG_SERVICE_NEW_FOUND = 64 #define in lib/dvb/idvb.h as dxNewFound = 64
 
 
 FLAG_SERVICE_NEW_FOUND = 64 #define in lib/dvb/idvb.h as dxNewFound = 64
 
@@ -276,7 +287,7 @@ class SelectionEventInfo:
                self["ServiceEvent"] = ServiceEvent()
                self.servicelist.connectSelChanged(self.__selectionChanged)
                self.timer = eTimer()
                self["ServiceEvent"] = ServiceEvent()
                self.servicelist.connectSelChanged(self.__selectionChanged)
                self.timer = eTimer()
-               self.timer.timeout.get().append(self.updateEventInfo)
+               self.timer.callback.append(self.updateEventInfo)
                self.onShown.append(self.__selectionChanged)
 
        def __selectionChanged(self):
                self.onShown.append(self.__selectionChanged)
 
        def __selectionChanged(self):
@@ -1081,7 +1092,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                        })
 
                self.lastChannelRootTimer = eTimer()
                        })
 
                self.lastChannelRootTimer = eTimer()
-               self.lastChannelRootTimer.timeout.get().append(self.__onCreate)
+               self.lastChannelRootTimer.callback.append(self.__onCreate)
                self.lastChannelRootTimer.start(100,True)
 
                self.history_tv = [ ]
                self.lastChannelRootTimer.start(100,True)
 
                self.history_tv = [ ]
index 10423ad..5028301 100644 (file)
@@ -29,7 +29,7 @@ class MMIDialog(Screen):
                self.slotid = slotid
 
                self.timer = eTimer()
                self.slotid = slotid
 
                self.timer = eTimer()
-               self.timer.timeout.get().append(self.keyCancel)
+               self.timer.callback.append(self.keyCancel)
 
                #else the skins fails
                self["title"] = Label("")
 
                #else the skins fails
                self["title"] = Label("")
index 7746b13..1bb3d0b 100644 (file)
@@ -22,7 +22,7 @@ class EventViewBase:
                self["key_red"] = Button("")
                if similarEPGCB is not None:
                        self.SimilarBroadcastTimer = eTimer()
                self["key_red"] = Button("")
                if similarEPGCB is not None:
                        self.SimilarBroadcastTimer = eTimer()
-                       self.SimilarBroadcastTimer.timeout.get().append(self.getSimilarEvents)
+                       self.SimilarBroadcastTimer.callback.append(self.getSimilarEvents)
                else:
                        self.SimilarBroadcastTimer = None
                if self.isRecording:
                else:
                        self.SimilarBroadcastTimer = None
                if self.isRecording:
index 1578fae..19a674e 100644 (file)
@@ -24,10 +24,10 @@ class HarddiskWait(Screen):
                self.timer = eTimer()
                if type == HarddiskSetup.HARDDISK_INITIALIZE:
                        text = _("Initializing Harddisk...")
                self.timer = eTimer()
                if type == HarddiskSetup.HARDDISK_INITIALIZE:
                        text = _("Initializing Harddisk...")
-                       self.timer.timeout.get().append(self.doInit)
+                       self.timer.callback.append(self.doInit)
                else:
                        text = _("Checking Filesystem...")
                else:
                        text = _("Checking Filesystem...")
-                       self.timer.timeout.get().append(self.doCheck)
+                       self.timer.callback.append(self.doCheck)
                self["wait"] = Label(text)
                self.timer.start(100)
 
                self["wait"] = Label(text)
                self.timer.start(100)
 
index 228ca4e..80b4239 100644 (file)
@@ -2,19 +2,16 @@ from Tools.Profile import profile, profile_final
 
 from Screen import Screen
 
 
 from Screen import Screen
 
-profile("LOAD:MovieSelection")
-from Screens.MovieSelection import MovieSelection
+profile("LOAD:enigma")
+from enigma import iPlayableService
+
 profile("LOAD:ChannelSelectionRadio")
 from Screens.ChannelSelection import ChannelSelectionRadio
 profile("LOAD:ChannelSelectionRadio")
 from Screens.ChannelSelection import ChannelSelectionRadio
+profile("LOAD:MovieSelection")
+from Screens.MovieSelection import MovieSelection
 profile("LOAD:ChoiceBox")
 from Screens.ChoiceBox import ChoiceBox
 
 profile("LOAD:ChoiceBox")
 from Screens.ChoiceBox import ChoiceBox
 
-profile("LOAD:InitBar_Components")
-from Components.Sources.Source import ObsoleteSource
-from Components.ActionMap import HelpableActionMap
-from Components.config import config
-from Components.ServiceEventTracker import ServiceEventTracker
-
 profile("LOAD:InfoBarGenerics")
 from Screens.InfoBarGenerics import InfoBarShowHide, \
        InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarRdsDecoder, \
 profile("LOAD:InfoBarGenerics")
 from Screens.InfoBarGenerics import InfoBarShowHide, \
        InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarRdsDecoder, \
@@ -25,12 +22,15 @@ from Screens.InfoBarGenerics import InfoBarShowHide, \
        InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \
        InfoBarSubtitleSupport, InfoBarPiP, InfoBarPlugins, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport
 
        InfoBarSummarySupport, InfoBarMoviePlayerSummarySupport, InfoBarTimeshiftState, InfoBarTeletextPlugin, InfoBarExtensions, \
        InfoBarSubtitleSupport, InfoBarPiP, InfoBarPlugins, InfoBarSleepTimer, InfoBarServiceErrorPopupSupport
 
+profile("LOAD:InitBar_Components")
+from Components.Sources.Source import ObsoleteSource
+from Components.ActionMap import HelpableActionMap
+from Components.config import config
+from Components.ServiceEventTracker import ServiceEventTracker
+
 profile("LOAD:HelpableScreen")
 from Screens.HelpMenu import HelpableScreen
 
 profile("LOAD:HelpableScreen")
 from Screens.HelpMenu import HelpableScreen
 
-profile("LOAD:enigma")
-from enigma import iPlayableService
-
 class InfoBar(InfoBarShowHide,
        InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder,
        InfoBarEvent, InfoBarServiceName, InfoBarInstantRecord, InfoBarAudioSelection, 
 class InfoBar(InfoBarShowHide,
        InfoBarNumberZap, InfoBarChannelSelection, InfoBarMenu, InfoBarEPG, InfoBarRdsDecoder,
        InfoBarEvent, InfoBarServiceName, InfoBarInstantRecord, InfoBarAudioSelection, 
index 28e619f..b62a466 100644 (file)
@@ -71,7 +71,7 @@ class InfoBarShowHide:
                self.__locked = 0
 
                self.hideTimer = eTimer()
                self.__locked = 0
 
                self.hideTimer = eTimer()
-               self.hideTimer.timeout.get().append(self.doTimerHide)
+               self.hideTimer.callback.append(self.doTimerHide)
                self.hideTimer.start(5000, True)
 
                self.onShow.append(self.__onShow)
                self.hideTimer.start(5000, True)
 
                self.onShow.append(self.__onShow)
@@ -171,7 +171,7 @@ class NumberZap(Screen):
                        })
 
                self.Timer = eTimer()
                        })
 
                self.Timer = eTimer()
-               self.Timer.timeout.get().append(self.keyOK)
+               self.Timer.callback.append(self.keyOK)
                self.Timer.start(3000, True)
 
 class InfoBarNumberZap:
                self.Timer.start(3000, True)
 
 class InfoBarNumberZap:
@@ -1018,7 +1018,7 @@ class InfoBarTimeshift:
                self.timeshift_enabled = 0
                self.timeshift_state = 0
                self.ts_rewind_timer = eTimer()
                self.timeshift_enabled = 0
                self.timeshift_state = 0
                self.ts_rewind_timer = eTimer()
-               self.ts_rewind_timer.timeout.get().append(self.rewindService)
+               self.ts_rewind_timer.callback.append(self.rewindService)
 
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                        {
 
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                        {
index 216cf8c..eac0347 100644 (file)
@@ -28,7 +28,7 @@ class Ipkg(Screen):
                
                self.activity = 0
                self.activityTimer = eTimer()
                
                self.activity = 0
                self.activityTimer = eTimer()
-               self.activityTimer.timeout.get().append(self.doActivityTimer)
+               self.activityTimer.callback.append(self.doActivityTimer)
                #self.activityTimer.start(100, False)
                                
                self.ipkg = IpkgComponent()
                #self.activityTimer.start(100, False)
                                
                self.ipkg = IpkgComponent()
index df27667..51f3987 100644 (file)
@@ -61,7 +61,7 @@ class MessageBox(Screen):
                self.timeout = timeout
                if timeout > 0:
                        self.timer = eTimer()
                self.timeout = timeout
                if timeout > 0:
                        self.timer = eTimer()
-                       self.timer.timeout.get().append(self.timerTick)
+                       self.timer.callback.append(self.timerTick)
                        self.onExecBegin.append(self.startTimer)
                        self.origTitle = None
                        if self.execing:
                        self.onExecBegin.append(self.startTimer)
                        self.origTitle = None
                        if self.execing:
index e0bd4ab..8fb1eb8 100644 (file)
@@ -129,7 +129,7 @@ class SelectionEventInfo:
                self["Service"] = ServiceEvent()
                self.list.connectSelChanged(self.__selectionChanged)
                self.timer = eTimer()
                self["Service"] = ServiceEvent()
                self.list.connectSelChanged(self.__selectionChanged)
                self.timer = eTimer()
-               self.timer.timeout.get().append(self.updateEventInfo)
+               self.timer.callback.append(self.updateEventInfo)
                self.onShown.append(self.__selectionChanged)
 
        def __selectionChanged(self):
                self.onShown.append(self.__selectionChanged)
 
        def __selectionChanged(self):
@@ -156,7 +156,7 @@ class MovieSelection(Screen, HelpableScreen, SelectionEventInfo):
                self.bouquet_mark_edit = False
 
                self.delayTimer = eTimer()
                self.bouquet_mark_edit = False
 
                self.delayTimer = eTimer()
-               self.delayTimer.timeout.get().append(self.updateHDDData)
+               self.delayTimer.callback.append(self.updateHDDData)
 
                self["waitingtext"] = Label(_("Please wait... Loading list..."))
 
 
                self["waitingtext"] = Label(_("Please wait... Loading list..."))
 
index f5f48e2..6ae12ca 100644 (file)
@@ -148,7 +148,7 @@ class ParentalControlEditor(Screen):
                self.currentLetter = chr(SPECIAL_CHAR)
                self.readServiceList()
                self.chooseLetterTimer = eTimer()
                self.currentLetter = chr(SPECIAL_CHAR)
                self.readServiceList()
                self.chooseLetterTimer = eTimer()
-               self.chooseLetterTimer.timeout.get().append(self.chooseLetter)
+               self.chooseLetterTimer.callback.append(self.chooseLetter)
                self.onLayoutFinish.append(self.LayoutFinished)
 
                self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions", "NumberActions"],
                self.onLayoutFinish.append(self.LayoutFinished)
 
                self["actions"] = NumberActionMap(["DirectionActions", "ColorActions", "OkCancelActions", "NumberActions"],
index 2a8c3df..3e71912 100644 (file)
@@ -298,7 +298,7 @@ class ScanSetup(ConfigListScreen, Screen, CableTransponderSearchSupport):
                }, -2)
 
                self.statusTimer = eTimer()
                }, -2)
 
                self.statusTimer = eTimer()
-               self.statusTimer.timeout.get().append(self.updateStatus)
+               self.statusTimer.callback.append(self.updateStatus)
                #self.statusTimer.start(5000, True)
 
                self.list = []
                #self.statusTimer.start(5000, True)
 
                self.list = []
index c098886..448b4b4 100644 (file)
@@ -23,7 +23,7 @@ class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, Info
                self.currentlyPlayingSubservice = 0
 
                self.timer = eTimer()
                self.currentlyPlayingSubservice = 0
 
                self.timer = eTimer()
-               self.timer.timeout.get().append(self.playSubservice)
+               self.timer.callback.append(self.playSubservice)
                self.onLayoutFinish.append(self.onLayoutFinished)
 
                self["actions"] = NumberActionMap( [ "InfobarSubserviceQuickzapActions", "NumberActions", "DirectionActions", "ColorActions" ], 
                self.onLayoutFinish.append(self.onLayoutFinished)
 
                self["actions"] = NumberActionMap( [ "InfobarSubserviceQuickzapActions", "NumberActions", "DirectionActions", "ColorActions" ], 
index 1b13315..c987ac6 100644 (file)
@@ -162,7 +162,7 @@ class Wizard(Screen, HelpableScreen):
                self.currStep = 1
                
                self.timeoutTimer = eTimer()
                self.currStep = 1
                
                self.timeoutTimer = eTimer()
-               self.timeoutTimer.timeout.get().append(self.timeoutCounterFired)
+               self.timeoutTimer.callback.append(self.timeoutCounterFired)
 
                self["text"] = Label()
 
 
                self["text"] = Label()
 
index 2cbc0f4..696b8e2 100644 (file)
@@ -56,7 +56,7 @@ class NumericalTextInput:
 
                if handleTimeout:
                        self.timer = eTimer()
 
                if handleTimeout:
                        self.timer = eTimer()
-                       self.timer.timeout.get().append(self.timeout)
+                       self.timer.callback.append(self.timeout)
                else:
                        self.timer = None
                self.lastKey = -1
                else:
                        self.timer = None
                self.lastKey = -1
index 06d7435..e3b4cd2 100644 (file)
@@ -135,7 +135,6 @@ typedef long time_t;
 %include <lib/base/object.h>
 %include <lib/base/eerror.h>
 
 %include <lib/base/object.h>
 %include <lib/base/eerror.h>
 
-%immutable eTimer::timeout;
 %immutable eSocketNotifier::activated;
 %include <lib/base/ebase.h>
 %include <lib/base/smartptr.h>
 %immutable eSocketNotifier::activated;
 %include <lib/base/ebase.h>
 %include <lib/base/smartptr.h>
index 84716e7..ad029fb 100644 (file)
@@ -3,6 +3,7 @@
 #undef _POSIX_C_SOURCE
 #define _POSIX_C_SOURCE 200112L
 extern "C" void init_enigma();
 #undef _POSIX_C_SOURCE
 #define _POSIX_C_SOURCE 200112L
 extern "C" void init_enigma();
+extern "C" void eBaseInit(void);
 extern void bsodFatal();
 
 #define SKIP_PART2
 extern void bsodFatal();
 
 #define SKIP_PART2
@@ -124,6 +125,7 @@ ePython::ePython()
        PyEval_InitThreads();
 
        init_enigma();
        PyEval_InitThreads();
 
        init_enigma();
+       eBaseInit();
 }
 
 ePython::~ePython()
 }
 
 ePython::~ePython()
index 76f6aa8..9edc50a 100644 (file)
@@ -314,10 +314,16 @@ inline ePyObject Impl_PyTuple_GET_ITEM(ePyObject list, unsigned int pos)
 }
 #endif
 
 }
 #endif
 
+inline void Impl_INCREF(PyObject *ob)
+{
+       Py_INCREF(ob);
+}
+
 inline void Impl_DECREF(PyObject *ob)
 {
        Py_DECREF(ob);
 }
 inline void Impl_DECREF(PyObject *ob)
 {
        Py_DECREF(ob);
 }
+#define Org_Py_INCREF(obj) Impl_INCREF(obj)
 #define Org_Py_DECREF(obj) Impl_DECREF(obj)
 #undef Py_DECREF
 #undef Py_XDECREF
 #define Org_Py_DECREF(obj) Impl_DECREF(obj)
 #undef Py_DECREF
 #undef Py_XDECREF
index fd72529..7e7c662 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -1,3 +1,8 @@
+import eBaseImpl
+import enigma
+enigma.eTimer = eBaseImpl.eTimer
+enigma.eSocketNotifier = eBaseImpl.eSocketNotifier
+
 from Tools.Profile import profile, profile_final
 
 profile("PYTHON_START")
 from Tools.Profile import profile, profile_final
 
 profile("PYTHON_START")
@@ -141,7 +146,7 @@ class Session:
                self.summary_desktop = summary_desktop
                self.nav = navigation
                self.delay_timer = eTimer()
                self.summary_desktop = summary_desktop
                self.nav = navigation
                self.delay_timer = eTimer()
-               self.delay_timer.timeout.get().append(self.processDelay)
+               self.delay_timer.callback.append(self.processDelay)
 
                self.current_dialog = None
 
 
                self.current_dialog = None
 
@@ -350,7 +355,7 @@ class VolumeControl:
                self.muteDialog = session.instantiateDialog(Mute)
 
                self.hideVolTimer = eTimer()
                self.muteDialog = session.instantiateDialog(Mute)
 
                self.hideVolTimer = eTimer()
-               self.hideVolTimer.timeout.get().append(self.volHide)
+               self.hideVolTimer.callback.append(self.volHide)
 
                vol = config.audio.volume.value
                self.volumeDialog.setValue(vol)
 
                vol = config.audio.volume.value
                self.volumeDialog.setValue(vol)
index bf23262..2bf2a59 100644 (file)
@@ -75,7 +75,7 @@ def stop():
 def run(duration = 1000):
        stoptimer = eTimer()
        stoptimer.start(duration * 1000.0)
 def run(duration = 1000):
        stoptimer = eTimer()
        stoptimer.start(duration * 1000.0)
-       stoptimer.timeout.get().append(stop)
+       stoptimer.callback.append(stop)
        while not stopped:
                runIteration()
 
        while not stopped:
                runIteration()
 
index 6f3a05f..0569635 100644 (file)
--- a/timer.py
+++ b/timer.py
@@ -139,7 +139,7 @@ class Timer:
                self.processed_timers = [ ]
                
                self.timer = eTimer()
                self.processed_timers = [ ]
                
                self.timer = eTimer()
-               self.timer.timeout.get().append(self.calcNextActivation)
+               self.timer.callback.append(self.calcNextActivation)
                self.lastActivation = time()
                
                self.calcNextActivation()
                self.lastActivation = time()
                
                self.calcNextActivation()