summaryrefslogtreecommitdiff
path: root/src/timed_events.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/timed_events.py')
-rw-r--r--src/timed_events.py44
1 files changed, 42 insertions, 2 deletions
diff --git a/src/timed_events.py b/src/timed_events.py
index 6e4da396..7cb92cde 100644
--- a/src/timed_events.py
+++ b/src/timed_events.py
@@ -14,15 +14,55 @@
# You should have received a copy of the GNU General Public License
# along with Poezio. If not, see <http://www.gnu.org/licenses/>.
+"""
+To use these, just use core.add_timed_event(event)
+where event is an instance of one of these classes
+"""
+
+import logging
+
+log = logging.getLogger(__name__)
+
+import datetime
class TimedEvent(object):
"""
An event with a callback that is called when the specified time is passed
Note that these events can NOT be used for very small delay or a very
precise date, since the check for events is done once per second, as
- a maximum
+ a maximum.
"""
- def __init__(self, callback, *args, **kwargs):
+ def __init__(self, date, callback, *args):
self._callback = callback
self.args = args
+ self.repetive = False
+ self.next_call_date = date
+
+ def __call__(self):
+ """
+ the call should return False if this event should be remove from
+ the events list.
+ If it’s true, the date should be updated beforehand to a later date,
+ or else it will be called every second
+ """
+ self._callback(*self.args)
+ return self.repetive
+
+ def has_timed_out(self, current_date):
+ """
+ returns True if the callback should be called
+ """
+ if self.next_call_date < current_date:
+ return True
+ else:
+ return False
+
+class DelayedEvent(TimedEvent):
+ """
+ The date is calculated from now + a delay in seconds
+ Use it if you want an event to happen in, e.g. 6 seconds
+ """
+ def __init__(self, delay, callback, *args):
+ date = datetime.datetime.now() + datetime.timedelta(0, delay)
+ TimedEvent.__init__(self, date, callback, args)