core: image convertion + SVG support:

/!\ new optional dependency: CairoSVG (with installed `[SVG]` extra)

- new `convert` method in `tools.image` to save an image in an other format, with support
  for SVG (when CairoSVG is available)
- new `imageConvert` method is available for frontends
This commit is contained in:
Goffi 2020-04-19 16:53:44 +02:00
commit 47ec15cc46
2 changed files with 203 additions and 3 deletions

View file

@ -507,6 +507,15 @@ class Bridge:
kwargs['error_handler'] = error_handler
return str(self.db_core_iface.imageCheck(arg_0, **kwargs))
def imageConvert(self, source, dest, arg_2, extra, callback=None, errback=None):
if callback is None:
error_handler = None
else:
if errback is None:
errback = log.error
error_handler = lambda err:errback(dbus_to_bridge_exception(err))
return str(self.db_core_iface.imageConvert(source, dest, arg_2, extra, timeout=const_TIMEOUT, reply_handler=callback, error_handler=error_handler))
def imageGeneratePreview(self, image_path, profile_key, callback=None, errback=None):
if callback is None:
error_handler = None
@ -1197,6 +1206,14 @@ class AIOBridge(Bridge):
self.db_core_iface.imageCheck(arg_0, timeout=const_TIMEOUT, reply_handler=reply_handler, error_handler=error_handler)
return fut
def imageConvert(self, source, dest, arg_2, extra):
loop = asyncio.get_running_loop()
fut = loop.create_future()
reply_handler = lambda ret=None: loop.call_soon_threadsafe(fut.set_result, ret)
error_handler = lambda err: loop.call_soon_threadsafe(fut.set_exception, dbus_to_bridge_exception(err))
self.db_core_iface.imageConvert(source, dest, arg_2, extra, timeout=const_TIMEOUT, reply_handler=reply_handler, error_handler=error_handler)
return fut
def imageGeneratePreview(self, image_path, profile_key):
loop = asyncio.get_running_loop()
fut = loop.create_future()

View file

@ -439,6 +439,15 @@ class Bridge(object):
else:
d.addErrback(self._errback, ori_errback=errback)
def imageConvert(self, source, dest, arg_2, extra, callback=None, errback=None):
d = self.root.callRemote("imageConvert", source, dest, arg_2, extra)
if callback is not None:
d.addCallback(callback)
if errback is None:
d.addErrback(self._generic_errback)
else:
d.addErrback(self._errback, ori_errback=errback)
def imageGeneratePreview(self, image_path, profile_key, callback=None, errback=None):
d = self.root.callRemote("imageGeneratePreview", image_path, profile_key)
if callback is not None:
@ -926,6 +935,11 @@ class AIOBridge(Bridge):
d.addErrback(self._errback)
return d.asFuture(asyncio.get_event_loop())
def imageConvert(self, source, dest, arg_2, extra):
d = self.root.callRemote("imageConvert", source, dest, arg_2, extra)
d.addErrback(self._errback)
return d.asFuture(asyncio.get_event_loop())
def imageGeneratePreview(self, image_path, profile_key):
d = self.root.callRemote("imageGeneratePreview", image_path, profile_key)
d.addErrback(self._errback)