From e81d8f0a99b1d7260d2ed631905320bb20bda23a Mon Sep 17 00:00:00 2001 From: qwersyk Date: Sun, 29 Dec 2024 11:26:33 +0100 Subject: [PATCH] video upload support. --- src/screenrecorder.py | 79 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/screenrecorder.py diff --git a/src/screenrecorder.py b/src/screenrecorder.py new file mode 100644 index 0000000..c656870 --- /dev/null +++ b/src/screenrecorder.py @@ -0,0 +1,79 @@ +import gi + +gi.require_version('Gtk', '4.0') +gi.require_version('Adw', '1') +from gi.repository import Gtk, Adw, GLib, Gio +import os + + +class ScreenRecorder: + def __init__(self, parent_window): + self.window = parent_window + self.recording = False + self.output_path = os.path.join(GLib.get_user_cache_dir(), "screen") + self.init_proxy() + + def init_proxy(self): + try: + self.proxy = Gio.DBusProxy.new_for_bus_sync( + Gio.BusType.SESSION, + Gio.DBusProxyFlags.NONE, + None, + 'org.gnome.Shell.Screencast', + '/org/gnome/Shell/Screencast', + 'org.gnome.Shell.Screencast', + None + ) + except GLib.Error as e: + self.show_error(str(e)) + + def start(self): + if not self.recording: + try: + old_file = self.output_path + ".mp4" + if os.path.exists(old_file): + try: + os.remove(old_file) + except OSError as e: + self.show_error(str(e)) + return False + + success, path = self.proxy.call_sync( + 'Screencast', + GLib.Variant( + '(sa{sv})', + (self.output_path, {}) + ), + Gio.DBusCallFlags.NONE, + -1, + None + ) + if success: + self.recording = True + return True + + except GLib.Error as e: + self.show_error(str(e)) + return False + + def stop(self, *args): + if self.recording: + try: + self.proxy.call_sync( + 'StopScreencast', + None, + Gio.DBusCallFlags.NONE, + -1, + None + ) + self.recording = False + except GLib.Error as e: + self.show_error(str(e)) + + def show_error(self, message): + dialog = Adw.MessageDialog.new(self.window) + dialog.set_heading("Error") + dialog.set_body(str(message)) + dialog.set_modal(True) + dialog.add_response("ok", "OK") + dialog.present() \ No newline at end of file