asd
This commit is contained in:
@ -0,0 +1,79 @@
|
||||
import logging
|
||||
|
||||
from pyscreenshot.plugins.backend import UNKNOWN_VERSION, CBackend
|
||||
from pyscreenshot.tempexport import read_func_img
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class GnomeDBusError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class GnomeDBusWrapper(CBackend):
|
||||
name = "gnome_dbus"
|
||||
is_subprocess = True
|
||||
|
||||
def grab(self, bbox=None):
|
||||
im = read_func_img(self._grab_to_file, bbox)
|
||||
return im
|
||||
|
||||
def _grab_to_file(self, filename, bbox=None):
|
||||
has_jeepney = False
|
||||
try:
|
||||
# from jeepney import new_method_call
|
||||
from jeepney.io.blocking import open_dbus_connection # type: ignore
|
||||
from jeepney.wrappers import MessageGenerator # type: ignore
|
||||
from jeepney.wrappers import new_method_call
|
||||
|
||||
has_jeepney = True
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
if not has_jeepney:
|
||||
raise GnomeDBusError("jeepney library is missing")
|
||||
|
||||
class Screenshot(MessageGenerator):
|
||||
interface = "org.gnome.Shell.Screenshot"
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
object_path="/org/gnome/Shell/Screenshot",
|
||||
bus_name="org.gnome.Shell.Screenshot",
|
||||
):
|
||||
super().__init__(object_path=object_path, bus_name=bus_name)
|
||||
|
||||
def Screenshot(self, include_cursor, flash, filename):
|
||||
return new_method_call(
|
||||
self, "Screenshot", "bbs", (include_cursor, flash, filename)
|
||||
)
|
||||
|
||||
def ScreenshotArea(self, x, y, width, height, flash, filename):
|
||||
return new_method_call(
|
||||
self,
|
||||
"ScreenshotArea",
|
||||
"iiiibs",
|
||||
(x, y, width, height, flash, filename),
|
||||
)
|
||||
|
||||
# https://jeepney.readthedocs.io/en/latest/integrate.html
|
||||
connection = open_dbus_connection(bus="SESSION")
|
||||
dbscr = Screenshot()
|
||||
if bbox:
|
||||
msg = dbscr.ScreenshotArea(
|
||||
bbox[0],
|
||||
bbox[1],
|
||||
bbox[2] - bbox[0],
|
||||
bbox[3] - bbox[1],
|
||||
False,
|
||||
filename,
|
||||
)
|
||||
else:
|
||||
msg = dbscr.Screenshot(False, False, filename)
|
||||
reply = connection.send_and_get_reply(msg)
|
||||
result = reply.body[0]
|
||||
if not result:
|
||||
raise GnomeDBusError("dbus error: %s %s" % (msg, result))
|
||||
|
||||
def backend_version(self):
|
||||
return UNKNOWN_VERSION
|
||||
Reference in New Issue
Block a user