95 lines
3.6 KiB
Diff
95 lines
3.6 KiB
Diff
From 727d4e349409d5b45903faa169662cdeff381903 Mon Sep 17 00:00:00 2001
|
|
From: Jakub Filak <jfilak@redhat.com>
|
|
Date: Mon, 24 Aug 2015 15:00:36 +0200
|
|
Subject: [PATCH] Delay initialization of GNOME Screencast D-Bus proxy
|
|
|
|
Related: rhbz#1197607, rhbz#1197997, rhbz#1199242
|
|
|
|
Signed-off-by: Jakub Filak <jfilak@redhat.com>
|
|
---
|
|
src/pyfros/plugins/screencastgnome.py | 50 ++++++++++++++++++++++-------------
|
|
1 file changed, 32 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/src/pyfros/plugins/screencastgnome.py b/src/pyfros/plugins/screencastgnome.py
|
|
index d752c31..84a5443 100644
|
|
--- a/src/pyfros/plugins/screencastgnome.py
|
|
+++ b/src/pyfros/plugins/screencastgnome.py
|
|
@@ -102,6 +102,7 @@
|
|
</interface>
|
|
"""
|
|
from pyfros.screencastbase import ScreencastBase, ScreencastResult
|
|
+from pyfros.froslogging import info, error
|
|
import pyfros.plugins.const as const
|
|
import dbus
|
|
import os
|
|
@@ -120,35 +121,48 @@ class ScreencastGnome(ScreencastBase):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(ScreencastGnome, self).__init__(*args, **kwargs)
|
|
- bus = dbus.SessionBus()
|
|
- self._proxy = dbus.Interface(
|
|
- bus.get_object(
|
|
- BUS_NAME, BUS_PATH,
|
|
- follow_name_owner_changes=False
|
|
- ),
|
|
- BUS_IFACE
|
|
- )
|
|
-
|
|
+ self._proxy = None
|
|
self.output = os.path.join(os.getcwd(), "screencast-%d-%t.webm")
|
|
|
|
+ def _backend(self):
|
|
+ if self._proxy is None:
|
|
+ bus = dbus.SessionBus()
|
|
+ obj = bus.get_object(BUS_NAME, BUS_PATH, follow_name_owner_changes=False)
|
|
+ self._proxy = dbus.Interface(obj, BUS_IFACE)
|
|
+
|
|
+ return self._proxy
|
|
+
|
|
def Screencast(self):
|
|
- succ, filename = self._proxy.ScreencastArea(self.x,
|
|
- self.y,
|
|
- self.width,
|
|
- self.height,
|
|
- self.output,
|
|
- {"framerate": 5}
|
|
- )
|
|
- return ScreencastResult(succ, filename)
|
|
+ try:
|
|
+ succ, filename = self._backend().ScreencastArea(self.x,
|
|
+ self.y,
|
|
+ self.width,
|
|
+ self.height,
|
|
+ self.output,
|
|
+ {"framerate": 5}
|
|
+ )
|
|
+ return ScreencastResult(succ, filename)
|
|
+ except dbus.exceptions.DBusException as ex:
|
|
+ error("Failed to start GNOME screencasting: %s" % (str(ex)))
|
|
+ return ScreencastResult(False, None)
|
|
|
|
def ScreencastArea(self):
|
|
raise NotImplementedError
|
|
|
|
def StopScreencast(self, end_handler):
|
|
- self._proxy.StopScreencast()
|
|
+ try:
|
|
+ self._backend().StopScreencast()
|
|
+ except dbus.exceptions.DBusException as ex:
|
|
+ error("Failed to stop GNOME screencasting: %s" % (str(ex)))
|
|
end_handler()
|
|
|
|
def IsSuitable(self):
|
|
+ try:
|
|
+ self._backend()
|
|
+ except dbus.exceptions.DBusException as ex:
|
|
+ info("D-Bus GNOME Screencaster is not available: %s" % (str(ex)))
|
|
+ return const.SUITABLE_NOT_SUITABLE
|
|
+
|
|
if os.environ.get('XDG_CURRENT_DESKTOP') in \
|
|
['GNOME', 'GNOME-Classic:GNOME', 'GNOME-Classic']:
|
|
return const.SUITABLE_PREFERED
|
|
--
|
|
2.5.0
|
|
|