From c57284fd654b6399c87c2ccfa3d8e60036574151 Mon Sep 17 00:00:00 2001 From: zhuchunyi Date: Wed, 6 Nov 2019 19:07:11 +0800 Subject: [PATCH] update code --- ...-prototypes-for-used-X11-C-functions.patch | 67 +++++++++++++ 0004-Switch-to-XDG_CURRENT_DESKTOP.patch | 33 ++++++ ...the-right-version-of-Gtk-gets-loaded.patch | 36 +++++++ ...tion-of-GNOME-Screencast-D-Bus-proxy.patch | 94 ++++++++++++++++++ ...nity-check-to-recordmydestkop-plugin.patch | 50 ++++++++++ fros-1.1-30275a0.tar.gz | Bin 0 -> 17121 bytes fros.spec | 66 ++++++++++++ 7 files changed, 346 insertions(+) create mode 100644 0002-Specify-prototypes-for-used-X11-C-functions.patch create mode 100644 0004-Switch-to-XDG_CURRENT_DESKTOP.patch create mode 100644 0005-Ensure-that-the-right-version-of-Gtk-gets-loaded.patch create mode 100644 0006-Delay-initialization-of-GNOME-Screencast-D-Bus-proxy.patch create mode 100644 0007-Add-a-sanity-check-to-recordmydestkop-plugin.patch create mode 100644 fros-1.1-30275a0.tar.gz create mode 100644 fros.spec diff --git a/0002-Specify-prototypes-for-used-X11-C-functions.patch b/0002-Specify-prototypes-for-used-X11-C-functions.patch new file mode 100644 index 0000000..c03dedc --- /dev/null +++ b/0002-Specify-prototypes-for-used-X11-C-functions.patch @@ -0,0 +1,67 @@ +From a076837517074986ba4253d2dd8328356729ff20 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Wed, 29 Jul 2015 14:23:34 +0200 +Subject: [PATCH] Specify prototypes for used X11 C functions + +Python does not magically resolve types of C functions imported through +ctypes. Without specifying their prototypes the return type of all +functions is c_int and all Python int arguments are converted to C int +arguments. + +The return type of XOpenDisplay is 'Display *', so the correct return type is +'c_void_p'. + +The argument type of XCloseDisplay is 'Display *', so the correct +argument type is 'c_void_p' too. + +Without this patch, the pointers returned from XOpenDisplay and passed +to XCloseDisplay are truncated to int, which is shorter than 'void *' on +some architectures, and that causes unpredicted behavior which leads to +a crash. + +Related: bugzilla.redhat.com/1244261 + +Signed-off-by: Jakub Filak +--- + src/fros | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +diff --git a/src/fros b/src/fros +index 56b4070..22a62b8 100755 +--- a/src/fros ++++ b/src/fros +@@ -19,7 +19,7 @@ + + + import sys +-from ctypes import cdll, util ++from ctypes import cdll, util, c_void_p, c_char_p + + XLIB_PATH = util.find_library('X11') + if not XLIB_PATH: +@@ -27,12 +27,20 @@ if not XLIB_PATH: + sys.exit(1) + + XLIB = cdll.LoadLibrary(XLIB_PATH) +-DISPLAY = XLIB.XOpenDisplay(None) ++ ++XOpenDisplay = XLIB.XOpenDisplay ++XOpenDisplay.argtypes = [c_char_p] ++XOpenDisplay.restype = c_void_p ++ ++DISPLAY = XOpenDisplay(None) + if DISPLAY == 0: + sys.stderr.write("Cannot connect to X server\n") + sys.exit(2) + +-XLIB.XCloseDisplay(DISPLAY) ++XCloseDisplay = XLIB.XCloseDisplay ++XCloseDisplay.argtypes = [c_void_p] ++ ++XCloseDisplay(DISPLAY) + + from pyfros.froslogging import error, info, set_verbosity + from pyfros.controls import Controls +-- +2.4.6 + diff --git a/0004-Switch-to-XDG_CURRENT_DESKTOP.patch b/0004-Switch-to-XDG_CURRENT_DESKTOP.patch new file mode 100644 index 0000000..28d2a69 --- /dev/null +++ b/0004-Switch-to-XDG_CURRENT_DESKTOP.patch @@ -0,0 +1,33 @@ +From 1742464ca9e86044309041070ad2597f6723901a Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 24 Aug 2015 09:57:33 +0200 +Subject: [PATCH] Switch to XDG_CURRENT_DESKTOP + +The environment variable is not documented (or at least I cannot find any +official documentation), the environment variable is used by all major +Dekstop vendors though (just try to ask google to search for its name). + +Related rhbz#1194976 + +Signed-off-by: Jakub Filak +--- + src/pyfros/plugins/screencastgnome.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/pyfros/plugins/screencastgnome.py b/src/pyfros/plugins/screencastgnome.py +index 7bf5105..d752c31 100644 +--- a/src/pyfros/plugins/screencastgnome.py ++++ b/src/pyfros/plugins/screencastgnome.py +@@ -149,7 +149,8 @@ class ScreencastGnome(ScreencastBase): + end_handler() + + def IsSuitable(self): +- if "gnome" in os.getenv("DESKTOP_SESSION"): ++ if os.environ.get('XDG_CURRENT_DESKTOP') in \ ++ ['GNOME', 'GNOME-Classic:GNOME', 'GNOME-Classic']: + return const.SUITABLE_PREFERED + else: + return const.SUITABLE_NOT_SUITABLE +-- +2.5.0 + diff --git a/0005-Ensure-that-the-right-version-of-Gtk-gets-loaded.patch b/0005-Ensure-that-the-right-version-of-Gtk-gets-loaded.patch new file mode 100644 index 0000000..f7e1a70 --- /dev/null +++ b/0005-Ensure-that-the-right-version-of-Gtk-gets-loaded.patch @@ -0,0 +1,36 @@ +From ab4c282729847338e97d236342d21fabd7cfb3aa Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 24 Aug 2015 10:28:39 +0200 +Subject: [PATCH] Ensure that the right version of Gtk gets loaded + +As suggested by PyGIWarning: + + /usr/lib/python3.4/site-packages/pyfros/controls.py:22: PyGIWarning: + Gtk was imported without specifying a version first. Use + gi.require_version('Gtk', '3.0') before import to ensure that the + right version gets loaded. + from gi.repository import Gtk + +Signed-off-by: Jakub Filak +--- + src/pyfros/controls.py | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/pyfros/controls.py b/src/pyfros/controls.py +index 0593ef7..b64cf8b 100644 +--- a/src/pyfros/controls.py ++++ b/src/pyfros/controls.py +@@ -15,6 +15,10 @@ + ## along with this program; if not, write to the Free Software + ## Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + ++# As suggested by a PyGIWarning ++import gi ++gi.require_version('Gtk', '3.0') ++ + # pylint has troubles importing from gi.repository because + # it uses introspection + # pylint: disable=E0611 +-- +2.5.0 + diff --git a/0006-Delay-initialization-of-GNOME-Screencast-D-Bus-proxy.patch b/0006-Delay-initialization-of-GNOME-Screencast-D-Bus-proxy.patch new file mode 100644 index 0000000..1e1166c --- /dev/null +++ b/0006-Delay-initialization-of-GNOME-Screencast-D-Bus-proxy.patch @@ -0,0 +1,94 @@ +From 727d4e349409d5b45903faa169662cdeff381903 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +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 +--- + 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 @@ + + """ + 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 + diff --git a/0007-Add-a-sanity-check-to-recordmydestkop-plugin.patch b/0007-Add-a-sanity-check-to-recordmydestkop-plugin.patch new file mode 100644 index 0000000..567498b --- /dev/null +++ b/0007-Add-a-sanity-check-to-recordmydestkop-plugin.patch @@ -0,0 +1,50 @@ +From 915a63da5e94f85a8f0a211c73f9fafa77bc31f4 Mon Sep 17 00:00:00 2001 +From: Jakub Filak +Date: Mon, 24 Aug 2015 15:26:03 +0200 +Subject: [PATCH] Add a sanity check to 'recordmydestkop' plugin + +Related: rhbz#1228860 + +Signed-off-by: Jakub Filak +--- + src/pyfros/plugins/screencastrecordmydesktop.py | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/src/pyfros/plugins/screencastrecordmydesktop.py b/src/pyfros/plugins/screencastrecordmydesktop.py +index 376b52b..63efd7d 100644 +--- a/src/pyfros/plugins/screencastrecordmydesktop.py ++++ b/src/pyfros/plugins/screencastrecordmydesktop.py +@@ -17,14 +17,14 @@ + + from pyfros.screencastbase import ScreencastBase, ScreencastResult + import pyfros.plugins.const as const +-from subprocess import Popen, PIPE ++from subprocess import Popen, PIPE, DEVNULL + import fcntl + import os + import signal + #pylint: disable=E0611 + from gi.repository import GLib + import re +-from pyfros.froslogging import warn ++from pyfros.froslogging import warn, error + + + def getScreencastPluginInstance(): +@@ -95,6 +95,13 @@ class ScreencastRecordMyDesktop(ScreencastBase): + print("ScreencastArea ScreencastRecordMyDesktop") + + def IsSuitable(self): ++ try: ++ proc = Popen(["recordmydesktop", "-h"], stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL) ++ proc.communicate() ++ except Exception as ex: ++ error("Cannot run 'recordmydesktop': %s" % (str(ex))) ++ return const.SUITABLE_NOT_SUITABLE ++ + return const.SUITABLE_DEFAULT # 1 is default + + def Screencast(self): +-- +2.5.0 + diff --git a/fros-1.1-30275a0.tar.gz b/fros-1.1-30275a0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a6505b0ad9f2c59904ada4df39ce3f935b458eb3 GIT binary patch literal 17121 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 literal 0 HcmV?d00001 diff --git a/fros.spec b/fros.spec new file mode 100644 index 0000000..4a6a9b1 --- /dev/null +++ b/fros.spec @@ -0,0 +1,66 @@ +%global commit 30275a07dab7891b9f31ff115743f67d757c7c1a +%global shortcommit %(c=%{commit}; echo ${c:0:7}) + +Name: fros +Version: 1.1 +Release: 18 +Summary: Universal screencasting frontend with pluggable support for various backends +License: GPLv2+ +URL: https://github.com/mozeq/fros +# this url is wrong, because github doesn't offer a space for downloadable archives +Source: https://github.com/mozeq/fros/archive/%{commit}/%{name}-%{version}-%{shortcommit}.tar.gz + +Patch0002: 0002-Specify-prototypes-for-used-X11-C-functions.patch +Patch0004: 0004-Switch-to-XDG_CURRENT_DESKTOP.patch +Patch0005: 0005-Ensure-that-the-right-version-of-Gtk-gets-loaded.patch +Patch0006: 0006-Delay-initialization-of-GNOME-Screencast-D-Bus-proxy.patch +Patch0007: 0007-Add-a-sanity-check-to-recordmydestkop-plugin.patch + +BuildArch: noarch + +BuildRequires: python3-devel python3-setuptools +Requires: python3-gobject + +Provides: %{name}-recordmydesktop %{name}-gnome +Obsoletes: %{name}-recordmydesktop %{name}-gnome + +%description +Universal screencasting frontend with pluggable support for various backends. +The goal is to provide an unified access to as many screencasting backends as +possible while still keeping the same user interface so the user experience +while across various desktops and screencasting programs is seamless. + +%package_help + +%prep +%autosetup -n %{name}-%{commit} -p1 + +%build +CFLAGS="$RPM_OPT_FLAGS" %{__python3} setup.py build + +%install +%{__python3} setup.py install --skip-build --root %{buildroot} + +%check +%{__python3} setup.py test + + +%files +%defattr(-,root,root) +%doc COPYING +%{_bindir}/fros +%{python3_sitelib}/pyfros/*.py* +%{python3_sitelib}/pyfros/__pycache__/*.cpython-%{python3_version_nodots}.*py* +%{python3_sitelib}/pyfros/plugins/* +%{python3_sitelib}/%{name}-%{version}-py%{python3_version}.egg-info/* + +%files help +%defattr(-,root,root) +%doc README +%{_mandir}/man1/%{name}.1* + + +%changelog +* Fri Oct 11 2019 openEuler Buildteam - 1.1-18 +- Package init +