2007-11-14 08:30:19 +00:00
|
|
|
# -*- coding: utf-8; mode: python; -*-
|
|
|
|
#
|
|
|
|
# GStreamer Development Utilities
|
|
|
|
#
|
|
|
|
# Copyright (C) 2007 René Stadler <mail@renestadler.de>
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify it
|
|
|
|
# under the terms of the GNU General Public License as published by the Free
|
|
|
|
# Software Foundation; either version 3 of the License, or (at your option)
|
|
|
|
# any later version.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
|
|
# more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License along with
|
|
|
|
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
2007-11-22 08:47:06 +00:00
|
|
|
"""GStreamer Development Utilities Common Data module."""
|
2007-11-14 08:30:19 +00:00
|
|
|
|
2015-10-20 13:21:01 +00:00
|
|
|
import gi
|
2007-11-14 08:30:19 +00:00
|
|
|
|
2015-10-20 13:21:01 +00:00
|
|
|
from gi.repository import GObject
|
2007-11-14 08:30:19 +00:00
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
|
2007-11-14 08:30:19 +00:00
|
|
|
class Dispatcher (object):
|
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
def __call__(self, iterator):
|
2007-11-14 08:30:19 +00:00
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
raise NotImplementedError("derived classes must override this method")
|
2007-11-14 08:30:19 +00:00
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
def cancel(self):
|
2007-11-21 15:40:31 +00:00
|
|
|
|
|
|
|
pass
|
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
|
2007-11-14 08:30:19 +00:00
|
|
|
class DefaultDispatcher (Dispatcher):
|
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
def __call__(self, iterator):
|
2007-11-14 08:30:19 +00:00
|
|
|
|
|
|
|
for x in iterator:
|
|
|
|
pass
|
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
|
2007-11-14 08:30:19 +00:00
|
|
|
class GSourceDispatcher (Dispatcher):
|
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
def __init__(self):
|
2007-11-14 08:30:19 +00:00
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
Dispatcher.__init__(self)
|
2007-11-14 08:30:19 +00:00
|
|
|
|
|
|
|
self.source_id = None
|
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
def __call__(self, iterator):
|
2007-11-14 08:30:19 +00:00
|
|
|
|
|
|
|
if self.source_id is not None:
|
2016-09-28 18:38:55 +00:00
|
|
|
GObject.source_remove(self.source_id)
|
2007-11-14 08:30:19 +00:00
|
|
|
|
2018-04-15 10:28:33 +00:00
|
|
|
def iteration():
|
|
|
|
r = iterator.__next__()
|
|
|
|
if not r:
|
|
|
|
self.source_id = None
|
|
|
|
return r
|
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
self.source_id = GObject.idle_add(
|
2018-04-15 10:28:33 +00:00
|
|
|
iteration, priority=GObject.PRIORITY_LOW)
|
2007-11-21 15:40:31 +00:00
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
def cancel(self):
|
2007-11-21 15:40:31 +00:00
|
|
|
|
|
|
|
if self.source_id is None:
|
|
|
|
return
|
|
|
|
|
2016-09-28 18:38:55 +00:00
|
|
|
GObject.source_remove(self.source_id)
|
2007-11-21 15:40:31 +00:00
|
|
|
self.source_id = None
|