Improve flatpak setup (#370)

* Improve flatpak workflow
Move from yaml to json in order to be supported by GNOME Builder
Update dependencies

* Simplify Flatpak install process
Reduce the amount of commands to install the resources
by using a single svg instead of pngs
and using install instead of mdkir&cp

* Remove unused flatpak dependencies

* Update Flatpak dependencies
This commit is contained in:
Julian Hofer 2019-11-04 08:31:21 +01:00 committed by Manuel Riel
parent bc9e311f48
commit 95a9744d1e
27 changed files with 312 additions and 451 deletions

View File

@ -71,24 +71,9 @@ translations-to-qm: ## Compile .ts text files to binary .qm files.
flatpak-install: translations-to-qm
pip3 install --prefix=/app --no-deps .
mkdir -p /app/share/metainfo/
cp src/vorta/assets/metadata/com.borgbase.Vorta.appdata.xml /app/share/metainfo/
mkdir -p /app/share/icons/hicolor/512x512/apps/
cp src/vorta/assets/icons/512x512/com.borgbase.Vorta.png /app/share/icons/hicolor/512x512/apps/
mkdir -p /app/share/icons/hicolor/256x256/apps/
cp src/vorta/assets/icons/256x256/com.borgbase.Vorta.png /app/share/icons/hicolor/256x256/apps/
mkdir -p /app/share/icons/hicolor/128x128/apps/
cp src/vorta/assets/icons/128x128/com.borgbase.Vorta.png /app/share/icons/hicolor/128x128/apps/
mkdir -p /app/share/icons/hicolor/64x64/apps/
cp src/vorta/assets/icons/64x64/com.borgbase.Vorta.png /app/share/icons/hicolor/64x64/apps/
mkdir -p /app/share/icons/hicolor/48x48/apps/
cp src/vorta/assets/icons/48x48/com.borgbase.Vorta.png /app/share/icons/hicolor/48x48/apps/
mkdir -p /app/share/icons/hicolor/32x32/apps/
cp src/vorta/assets/icons/32x32/com.borgbase.Vorta.png /app/share/icons/hicolor/32x32/apps/
mkdir -p /app/share/icons/hicolor/24x24/apps/
cp src/vorta/assets/icons/24x24/com.borgbase.Vorta.png /app/share/icons/hicolor/24x24/apps/
mkdir -p /app/share/applications/
cp src/vorta/assets/metadata/com.borgbase.Vorta.desktop /app/share/applications/
install -D src/vorta/assets/metadata/com.borgbase.Vorta.appdata.xml /app/share/metainfo/com.borgbase.Vorta.appdata.xml
install -D src/vorta/assets/icons/scalable/com.borgbase.Vorta.svg /app/share/icons/hicolor/scalable/apps/com.borgbase.Vorta.svg
install -D src/vorta/assets/metadata/com.borgbase.Vorta.desktop /app/share/applications/com.borgbase.Vorta.desktop
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

3
flatpak/.gitignore vendored
View File

@ -1,3 +0,0 @@
build-dir/
repo/
.flatpak-builder/

View File

@ -0,0 +1,62 @@
{
"app-id": "com.borgbase.Vorta",
"runtime": "org.kde.Platform",
"runtime-version": "5.13",
"sdk": "org.kde.Sdk",
"command": "vorta",
"branch": "devel",
"finish-args": [
"--socket=fallback-x11",
"--share=ipc",
"--socket=wayland",
"--device=dri",
"--share=network",
"--filesystem=host",
"--talk-name=org.kde.StatusNotifierWatcher",
"--own-name=org.kde.StatusNotifierItem-2-1",
"--own-name=org.kde.StatusNotifierItem-4-1",
"--talk-name=org.freedesktop.DBus.*",
"--talk-name=org.freedesktop.Flatpak.*",
"--talk-name=org.freedesktop.secrets",
"--socket=ssh-auth",
"--own-name=org.KDE.*",
"--talk-name=org.freedesktop.Notifications"
],
"build-options": {
"env": {
"BASH_COMPLETIONSDIR": "/app/share/bash-completion/completions",
"MOUNT_FUSE_PATH": "../tmp/",
"V": "1"
}
},
"modules": [
"dependencies/pyqt5.json",
"dependencies/libfuse.json",
"dependencies/python3-setuptools_scm.json",
"dependencies/python3-setuptools_git.json",
"dependencies/python3-borgbackup.json",
"dependencies/python3-llfuse.json",
"dependencies/python3-appdirs.json",
"dependencies/python3-apscheduler.json",
"dependencies/python3-paramiko.json",
"dependencies/python3-peewee.json",
"dependencies/python3-psutil.json",
"dependencies/python3-python-dateutil.json",
"dependencies/python3-qdarkstyle.json",
"dependencies/python3-secretstorage.json",
"dependencies/python3-pytest-runner.json",
{
"name": "vorta",
"buildsystem": "simple",
"build-commands": [
"make flatpak-install"
],
"sources": [
{
"type": "dir",
"path": "../"
}
]
}
]
}

View File

@ -1,72 +0,0 @@
app-id: com.borgbase.Vorta
runtime: org.kde.Platform
runtime-version: '5.12'
sdk: org.kde.Sdk
branch: devel
command: vorta
finish-args:
# X11/Wayland
- --socket=x11
- --share=ipc
- --socket=wayland
- --device=dri
# Sync
- --share=network
# Filesystem access
- --filesystem=host
# dconf access
- --filesystem=xdg-run/dconf
- --filesystem=~/.config/dconf:ro
- --talk-name=ca.desrt.dconf
- --env=DCONF_USER_CONFIG_DIR=.config/dconf
# Tray icon
- --talk-name=org.kde.StatusNotifierWatcher
- --own-name=org.kde.StatusNotifierItem-2-1
- --own-name=org.kde.StatusNotifierItem-4-1
- --own-name=org.kde.StatusNotifierItem-4-3
# Mounting
- --talk-name=org.freedesktop.DBus.*
- --talk-name=org.freedesktop.Flatpak.*
# Allow access to keyring
- --talk-name=org.freedesktop.secrets
# SSH
- --socket=ssh-auth
- --own-name=org.KDE.*
# Notifications
- --talk-name=org.freedesktop.Notifications
build-options:
env:
MOUNT_FUSE_PATH: ../tmp/
modules:
- dependencies/pyqt5.json
- dependencies/openssh.json
- dependencies/libfuse.json
- dependencies/python3-setuptools.json
- dependencies/python3-setuptools_git.json
- dependencies/python3-setuptools_scm.json
- dependencies/python3-borgbackup.json
- dependencies/python3-pytest.json
- dependencies/python3-llfuse.json
- dependencies/python3-appdirs.json
- dependencies/python3-apscheduler.json
- dependencies/python3-paramiko.json
- dependencies/python3-peewee.json
- dependencies/python3-psutil.json
- dependencies/python3-python-dateutil.json
- dependencies/python3-qdarkstyle.json
- dependencies/python3-secretstorage.json
- dependencies/python3-pytest-runner.json
- name: vorta
buildsystem: simple
build-commands:
- make flatpak-install
sources:
- type: dir
path: ../

View File

@ -1,114 +0,0 @@
#!/usr/bin/env python3
__license__ = 'MIT'
import argparse
import json
import hashlib
import os
import subprocess
import tempfile
import urllib.request
import shlex
from collections import OrderedDict
parser = argparse.ArgumentParser()
parser.add_argument('packages', nargs='+')
parser.add_argument('--python2', action='store_true',
help='Look for a Python 2 package')
parser.add_argument('--cleanup', choices=['scripts', 'all'],
help='Select what to clean up after build')
parser.add_argument('--build-only', action='store_const',
dest='cleanup', const='all',
help='Clean up all files after build')
parser.add_argument('--output',
help='Specify output file name')
opts = parser.parse_args()
def get_pypi_url(name: str, filename: str) -> str:
url = 'https://pypi.python.org/pypi/{}/json'.format(name)
print('Extracting download url for', name)
with urllib.request.urlopen(url) as response:
body = json.loads(response.read().decode('utf-8'))
for release in body['releases'].values():
for source in release:
if source['filename'] == filename:
return source['url']
else:
raise Exception('Failed to extract url from {}'.format(url))
def get_file_hash(filename: str) -> str:
sha = hashlib.sha256()
print('Generating hash for', filename)
with open(filename, 'rb') as f:
while True:
data = f.read(1024 * 1024 * 32)
if not data:
break
sha.update(data)
return sha.hexdigest()
package_name = 'python{}-{}'.format('2' if opts.python2 else '3',
opts.packages[0])
tempdir_prefix = 'pip-generator-{}-'.format(package_name)
with tempfile.TemporaryDirectory(prefix=tempdir_prefix) as tempdir:
if opts.python2:
pip_executable = 'pip2'
pip_install_prefix = '--install-option="--prefix=${FLATPAK_DEST}"'
else:
pip_executable = 'pip3'
pip_install_prefix = '--prefix=${FLATPAK_DEST}'
pip_download = [
pip_executable,
'download',
'--dest',
tempdir
]
subprocess.run(pip_download + [
'--no-binary', ':all:',
] + opts.packages, check=True)
pip_command = [
pip_executable,
'install',
'--no-index',
'--find-links="file://${PWD}"',
pip_install_prefix,
] + [
shlex.quote(package)
for package in opts.packages
]
main_module = OrderedDict([
('name', package_name),
('buildsystem', 'simple'),
('build-commands', [' '.join(pip_command)]),
('sources', []),
])
if opts.cleanup == 'all':
main_module['cleanup'] = ['*']
elif opts.cleanup == 'scripts':
main_module['cleanup'] = ['/bin', '/share/man/man1']
for filename in os.listdir(tempdir):
name = filename.rsplit('-', 1)[0]
sha256 = get_file_hash(os.path.join(tempdir, filename))
url = get_pypi_url(name, filename)
source = OrderedDict([
('type', 'file'),
('url', url),
('sha256', sha256),
])
main_module['sources'].append(source)
output_filename = opts.output or package_name + '.json'
with open(output_filename, 'w') as output:
output.write(json.dumps(main_module, indent=4))

View File

@ -1,10 +0,0 @@
{
"name": "openssh",
"sources": [
{
"type": "archive",
"url": "https://cloudflare.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz",
"sha256": "bd943879e69498e8031eb6b7f44d08cdc37d59a7ab689aa0b437320c3481fd68"
}
]
}

View File

@ -1,45 +1,44 @@
{
"name" : "pyqt5",
"config-opts" : [
"--disable-static",
"--enable-x11"
"name": "pyqt5",
"config-opts": [
"--disable-static",
"--enable-x11"
],
"sources": [
{
"type": "archive",
"url": "https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.11.3/PyQt5_gpl-5.11.3.zip",
"sha256": "7cacf0712d76a702e0e2102a65f411fd72e7f64a851a47a72c03fbafbe447aae"
},
{
"type": "script",
"commands": [
"python3 configure.py --assume-shared --confirm-license --no-designer-plugin --no-qml-plugin --sysroot=/app --qsci-api --qsci-api-destdir=/app/qsci --sipdir=/app/share/sip --sip=/app/bin/sip --sip-incdir=/app/include QMAKE_CFLAGS_RELEASE='-I/usr/include/python3.7m/' QMAKE_CXXFLAGS_RELEASE='-I/usr/include/python3.7m/'"
],
"sources" : [
"dest-filename": "configure"
}
],
"modules": [
{
"name": "sip",
"sources": [
{
"type" : "archive",
"url" : "https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.11.3/PyQt5_gpl-5.11.3.zip",
"sha256" : "7cacf0712d76a702e0e2102a65f411fd72e7f64a851a47a72c03fbafbe447aae"
"type": "archive",
"url": "https://sourceforge.net/projects/pyqt/files/sip/sip-4.19.12/sip-4.19.12.tar.gz",
"sha256": "24617fc31b983df075500ecac0e99d2fb48bf63ba82d4a17518659e571923822"
},
{
"type": "script",
"commands": [
"python3 configure.py --assume-shared --confirm-license --no-designer-plugin --no-qml-plugin --sysroot=/app --qsci-api --qsci-api-destdir=/app/qsci --sipdir=/app/share/sip --sip=/app/bin/sip --sip-incdir=/app/include QMAKE_CFLAGS_RELEASE='-I/usr/include/python3.7m/' QMAKE_CXXFLAGS_RELEASE='-I/usr/include/python3.7m/'"
"python3 configure.py --sip-module PyQt5.sip -b ${FLATPAK_DEST}/bin -d ${FLATPAK_DEST}/lib/python3.7/site-packages -e ${FLATPAK_DEST}/include -v ${FLATPAK_DEST}/share/sip --stubsdir=${FLATPAK_DEST}/lib/python3.7/site-packages"
],
"dest-filename": "configure"
}
],
"modules" : [
{
"name" : "sip",
"sources" : [
{
"type" : "archive",
"url" : "https://sourceforge.net/projects/pyqt/files/sip/sip-4.19.12/sip-4.19.12.tar.gz",
"sha256" : "24617fc31b983df075500ecac0e99d2fb48bf63ba82d4a17518659e571923822"
},
{
"type": "script",
"commands": [
"python3 configure.py --sip-module PyQt5.sip -b ${FLATPAK_DEST}/bin -d ${FLATPAK_DEST}/lib/python3.7/site-packages -e ${FLATPAK_DEST}/include -v ${FLATPAK_DEST}/share/sip --stubsdir=${FLATPAK_DEST}/lib/python3.7/site-packages"
],
"dest-filename": "configure"
}
],
"cleanup" : [
"/bin",
"/include"
]
}
]
}
"cleanup": [
"/bin",
"/include"
]
}
]
}

View File

@ -7,8 +7,8 @@
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/48/69/d87c60746b393309ca30761f8e2b49473d43450b150cb08f3c6df5c11be5/appdirs-1.4.3.tar.gz",
"sha256": "9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"
"url": "https://files.pythonhosted.org/packages/56/eb/810e700ed1349edde4cbdc1b2a21e28cdf115f9faf263f6bbf8447c1abf3/appdirs-1.4.3-py2.py3-none-any.whl",
"sha256": "d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
}
]
}

View File

@ -7,28 +7,28 @@
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/cb/89/e3687d3ed99bc882793f82634e9824e62499fdfdc4b1ae39e211c5b05017/tzlocal-1.5.1.tar.gz",
"sha256": "4ebeb848845ac898da6519b9b31879cf13b6626f7184c496037b818e238f2c4e"
"url": "https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl",
"sha256": "3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/df/d5/3e3ff673e8f3096921b3f1b79ce04b832e0100b4741573154b72b756a681/pytz-2019.1.tar.gz",
"sha256": "d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141"
"url": "https://files.pythonhosted.org/packages/6a/9a/50fadfd53ec909e4399b67c74cc7f4e883488035cfcdb90b685758fa8b34/setuptools-41.4.0-py2.py3-none-any.whl",
"sha256": "8d01f7ee4191d9fdcd9cc5796f75199deccb25b154eba82d44d6a042cf873670"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz",
"sha256": "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
"url": "https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf481fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl",
"sha256": "1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ed/69/c805067de1feedbb98c53174b0f2df44cc05e0e9ee73bb85eebc59e508c6/setuptools-41.0.0.zip",
"sha256": "79d30254b6fe7a8e672e43cd85f13a9f3f2a50080bc81d851143e2219ef0dcb1"
"url": "https://files.pythonhosted.org/packages/ef/99/53bd1ac9349262f59c1c421d8fcc2559ae8a5eeffed9202684756b648d33/tzlocal-2.0.0-py2.py3-none-any.whl",
"sha256": "11c9f16e0a633b4b60e1eede97d8a46340d042e67b670b290ca526576e039048"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/3d/e7/c63d49e5ac6feea330e837eaa6af1ce5c7ac9242288facc0aa71cb268a75/APScheduler-3.6.0.tar.gz",
"sha256": "8f56b888fdc9dc57dd18d79c124b5093a01e29144be84e3e99130600eea34260"
"url": "https://files.pythonhosted.org/packages/09/ff/d5b0e81846cd5e92d02e5f2682b78c73a5d9d61bc1eae32cea5ac15c0d47/APScheduler-3.6.1-py2.py3-none-any.whl",
"sha256": "cde18f6dbffa1b75aff67fd7fe423a3020cb0363f6c67bd45f24306d90898231"
}
]
}
}

View File

@ -11,4 +11,4 @@
"sha256": "efb41416d24ff1d13c7952c7f4eaf41ef6fc5e1000354217db55cd62c905e7de"
}
]
}
}

View File

@ -0,0 +1,8 @@
{
"name": "python3-dateutil",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} dateutil"
],
"sources": []
}

View File

@ -7,8 +7,8 @@
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/95/4f/97404f265299f3e6584efa3890bd325802b4076ea75e184c46c3c6c8c7ba/peewee-3.9.4.tar.gz",
"sha256": "92f5a20ff90d46f1f78e8d53d461061ef0ee192d7a7880efd41894b86fa4762d"
"url": "https://files.pythonhosted.org/packages/90/58/04bc705057694cac14c5c9a00dc83a80aafa1de27785227d3ee245cd4165/peewee-3.11.2.tar.gz",
"sha256": "f3f5c80c51b632d031f60454accadd84f166453a471bff63093ca674973f2a4e"
}
]
}

View File

@ -7,8 +7,8 @@
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/2f/b8/11ec5006d2ec2998cb68349b8d1317c24c284cf918ecd6729739388e4c56/psutil-5.6.1.tar.gz",
"sha256": "fa0a570e0a30b9dd618bffbece590ae15726b47f9f1eaf7518dfb35f4d7dcd21"
"url": "https://files.pythonhosted.org/packages/1c/ca/5b8c1fe032a458c2c4bcbe509d1401dca9dda35c7fc46b36bb81c2834740/psutil-5.6.3.tar.gz",
"sha256": "863a85c1c0a5103a12c05a35e59d336e1d665747e531256e061213e2e90f63f3"
}
]
}

View File

@ -1,94 +0,0 @@
{
"name": "python3-pytest",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} pytest pytest-qt pytest-mock pytest-xdist pytest-faulthandler setuptools-scm wheel"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/a8/af/07a13b1560ebcc9bf4dd439aeb63243cbd8d374f4f328691470d6a9b9804/apipkg-1.5.tar.gz",
"sha256": "37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/30/be/cb5dc4f0fa5ba121943305f4f235dc1a30fae53daac20094ab89f4618578/pytest-forked-1.0.2.tar.gz",
"sha256": "d352aaced2ebd54d42a65825722cb433004b4446ab5d2044851d9cc7a00c9e38"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/fe/9c/215c0b6a82a6b01a89d46559f401045aba2e166a91e545c16960e2bb62df/execnet-1.6.0.tar.gz",
"sha256": "752a3786f17416d491f833a29217dda3ea4a471fc5269c492eebcee8cc4772d3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/29/ed/3a85eb4afdce6dc33e78dad885e17c678db8055bf65353e0de4944c72a40/more-itertools-7.0.0.tar.gz",
"sha256": "c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/a7/8c/55c629849c64e665258d8976322dfdad171fa2f57117590662d8a67618a4/pluggy-0.9.0.tar.gz",
"sha256": "19ecf9ce9db2fce065a7a0586e07cfb4ac8614fe96edf628a264b1c70116cf8f"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ec/0f/cd484ac8820fed363b374af30049adc8fd13065720fd4f4c6be8a2309da7/atomicwrites-1.3.0.tar.gz",
"sha256": "75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/cc/d9/931a24cc5394f19383fbbe3e1147a0291276afa43a0dc3ed0d6cd9fda813/attrs-19.1.0.tar.gz",
"sha256": "f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ed/69/c805067de1feedbb98c53174b0f2df44cc05e0e9ee73bb85eebc59e508c6/setuptools-41.0.0.zip",
"sha256": "79d30254b6fe7a8e672e43cd85f13a9f3f2a50080bc81d851143e2219ef0dcb1"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz",
"sha256": "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/f1/5a/87ca5909f400a2de1561f1648883af74345fe96349f34f737cdfc94eba8c/py-1.8.0.tar.gz",
"sha256": "dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/b7/cf/1ea0f5b3ce55cacde1e84cdde6cee1ebaff51bd9a3e6c7ba4082199af6f6/wheel-0.33.1.tar.gz",
"sha256": "66a8fd76f28977bb664b098372daef2b27f60dc4d1688cfab7b37a09448f0e9d"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/54/85/514ba3ca2a022bddd68819f187ae826986051d130ec5b972076e4f58a9f3/setuptools_scm-3.2.0.tar.gz",
"sha256": "52ab47715fa0fc7d8e6cd15168d1a69ba995feb1505131c3e814eb7087b57358"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/b9/f0/d67a894cd3b49a8177c6fd7f883f275b27d8b71690cde9b5ba9e5f490f2d/pytest-faulthandler-1.5.0.tar.gz",
"sha256": "bf8634c3fd6309ef786ec03b913a5366163fdb094ebcfdebc35626400d790e0d"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/9b/d7/4f03c373d589b55925af8dc6d17850588babf7e41a9803aab96d6c4906d6/pytest-xdist-1.28.0.tar.gz",
"sha256": "f83a485293e81fd57c8a5a85a3f12473a532c5ca7dec518857cbb72766bb526c"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/18/01/92e33e69c1704bb26672f6043748c9ee3bb2d958bcf41cc8b9d447fa6746/pytest-mock-1.10.4.tar.gz",
"sha256": "5bf5771b1db93beac965a7347dc81c675ec4090cb841e49d9d34637a25c30568"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/7c/9a/092c4a8ba026ed99b9741bf11d20fef24753e1cba49ed6d03c2077c35ae5/pytest-qt-3.2.2.tar.gz",
"sha256": "f6ecf4b38088ae1092cbd5beeaf714516d1f81f8938626a2eac546206cdfe7fa"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/2b/b1/c9a84f79fc3bad226a9085289da11ecdd9bd2779a2c654195962b37d4110/pytest-4.4.1.tar.gz",
"sha256": "b7802283b70ca24d7119b32915efa7c409982f59913c1a6c0640aacf118b95f5"
}
]
}

View File

@ -2,33 +2,18 @@
"name": "python3-python-dateutil",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} python-dateutil setuptools wheel setuptools_scm"
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} python-dateutil"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz",
"sha256": "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
"url": "https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl",
"sha256": "3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/54/85/514ba3ca2a022bddd68819f187ae826986051d130ec5b972076e4f58a9f3/setuptools_scm-3.2.0.tar.gz",
"sha256": "52ab47715fa0fc7d8e6cd15168d1a69ba995feb1505131c3e814eb7087b57358"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/b7/cf/1ea0f5b3ce55cacde1e84cdde6cee1ebaff51bd9a3e6c7ba4082199af6f6/wheel-0.33.1.tar.gz",
"sha256": "66a8fd76f28977bb664b098372daef2b27f60dc4d1688cfab7b37a09448f0e9d"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ed/69/c805067de1feedbb98c53174b0f2df44cc05e0e9ee73bb85eebc59e508c6/setuptools-41.0.0.zip",
"sha256": "79d30254b6fe7a8e672e43cd85f13a9f3f2a50080bc81d851143e2219ef0dcb1"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ad/99/5b2e99737edeb28c71bcbec5b5dda19d0d9ef3ca3e92e3e925e7c0bb364c/python-dateutil-2.8.0.tar.gz",
"sha256": "c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"
"url": "https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl",
"sha256": "7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb"
}
]
}

View File

@ -7,8 +7,33 @@
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ce/76/bfb8e53e53c11432390fab04976791741dd5434c78fb6f862b27beb21ac6/QDarkStyle-2.6.5.tar.gz",
"sha256": "96b14cd0440a0f73db4e14c5accdaa08072625d0395ae011d444508cbd73eb9e"
"url": "https://files.pythonhosted.org/packages/45/dc/3241eef99eb45f1def35cf93af35d1cf9ef4c0991792583b8f33ea41b092/more_itertools-7.2.0-py3-none-any.whl",
"sha256": "92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/74/3d/1ee25a26411ba0401b43c6376d2316a71addcc72ef8690b101b4ea56d76a/zipp-0.6.0-py2.py3-none-any.whl",
"sha256": "f06903e9f1f43b12d371004b4ac7b06ab39a44adc747266928ae6debfa7b3335"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/f6/d2/40b3fa882147719744e6aa50ac39cf7a22a913cbcba86a0371176c425a3b/importlib_metadata-0.23-py2.py3-none-any.whl",
"sha256": "d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/1c/ca/5b8c1fe032a458c2c4bcbe509d1401dca9dda35c7fc46b36bb81c2834740/psutil-5.6.3.tar.gz",
"sha256": "863a85c1c0a5103a12c05a35e59d336e1d665747e531256e061213e2e90f63f3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/56/23/7bc32827ea3a34bdb19bded6c6be86e4ae69fceb21a5e27956fa6ef624f2/helpdev-0.6.10-py3-none-any.whl",
"sha256": "6cb2c604d97101a47b81d6d234b48e0f452efe4490b4cc67c33708420c2deaa0"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/7b/30/b528832a64e09bba180d14219262ed35f611863d032fee468e5686b52e21/QDarkStyle-2.7-py2.py3-none-any.whl",
"sha256": "c012bfaa482a1444b477b43a0b3585ea2f844ac16bfa2dff40ea535ce669c054"
}
]
}

View File

@ -2,39 +2,9 @@
"name": "python3-secretstorage",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} secretstorage flit intreehooks"
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} secretstorage"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz",
"sha256": "a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/06/b8/d1ea38513c22e8c906275d135818fee16ad8495985956a9b7e2bb21942a1/certifi-2019.3.9.tar.gz",
"sha256": "b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/fd/fa/b21f4f03176463a6cccdb612a5ff71b927e5224e83483012747c12fc5d62/urllib3-1.24.2.tar.gz",
"sha256": "9a247273df709c4fedb38c711e44292304f73f39ab01beda9f6b9fc375669ac3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ad/13/eb56951b6f7950cadb579ca166e448ba77f9d24efc03edd7e55fa57d04b7/idna-2.8.tar.gz",
"sha256": "c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz",
"sha256": "84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/93/1a/ab8c62b5838722f29f3daffcc8d4bd61844aa9b5f437341cc890ceee483b/cffi-1.12.3.tar.gz",
"sha256": "041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz",
@ -42,48 +12,33 @@
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/fc/f1/8db7daa71f414ddabfa056c4ef792e1461ff655c2ae2928a2b675bfed6b4/asn1crypto-0.24.0.tar.gz",
"sha256": "9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"
"url": "https://files.pythonhosted.org/packages/be/60/da377e1bed002716fb2d5d1d1cab720f298cb33ecff7bf7adea72788e4e4/cryptography-2.8.tar.gz",
"sha256": "3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/35/35/da1123673c54b6d701453fcd20f751d6a1fae43339b3993ae458875576e4/pytoml-0.1.20.tar.gz",
"sha256": "ca2d0cb127c938b8b76a9a0d0f855cf930c1d50cc3a0af6d3595b566519a1013"
"url": "https://files.pythonhosted.org/packages/d6/cf/ba7e2df852a2fc807d48b3f7bea46f741830be4f047a0712e6de3e95fb6a/cffi-1.13.0.tar.gz",
"sha256": "8fe230f612c18af1df6f348d02d682fe2c28ca0a6c3856c99599cdacae7cf226"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/84/f4/5771e41fdf52aabebbadecc9381d11dea0fa34e4759b4071244fa094804c/docutils-0.14.tar.gz",
"sha256": "51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274"
"url": "https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz",
"sha256": "a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/52/2c/514e4ac25da2b08ca5a464c50463682126385c4272c18193876e91f4bc38/requests-2.21.0.tar.gz",
"sha256": "502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e"
"url": "https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl",
"sha256": "3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/16/1d/74adf3b164a8d19a60d0fcf706a751ffa2a1eaa8e5bbb1b6705c92a05263/jeepney-0.4.tar.gz",
"sha256": "6089412a5de162c04747f0220f6b2223b8ba660acd041e52a76426ca550e3c70"
"url": "https://files.pythonhosted.org/packages/0a/4c/ef880713a6c6d628869596703167eab2edf8e0ec2d870d1089dcb0901b81/jeepney-0.4.1-py3-none-any.whl",
"sha256": "f6a3f93464a0cf052f4e87da3c8b3ed1e27696758fb9739c63d3a74d9a1b6774"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/07/ca/bc827c5e55918ad223d59d299fff92f3563476c3b00d0a9157d9c0217449/cryptography-2.6.1.tar.gz",
"sha256": "26c821cbeb683facb966045e2064303029d572a87ee69ca5a1bf54bf55f93ca6"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/f9/a5/5dacebf93232a847970921af2b020f9f2a8e0064e3a97727cd38efc77ba0/intreehooks-1.0.tar.gz",
"sha256": "87e600d3b16b97ed219c078681260639e77ef5a17c0e0dbdd5a302f99b4e34e1"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/1f/87/9ea76ab4cdf1fd36710d9688ec36a0053067c47e753b32272f952ff206c5/flit-1.3.tar.gz",
"sha256": "6f6f0fb83c51ffa3a150fa41b5ac118df9ea4a87c2c06dff4ebf9adbe7b52b36"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/a6/89/df343dbc2957a317127e7ff2983230dc5336273be34f2e1911519d85aeb5/SecretStorage-3.1.1.tar.gz",
"sha256": "20c797ae48a4419f66f8d28fc221623f11fc45b6828f96bdb1ad9990acb59f92"
"url": "https://files.pythonhosted.org/packages/82/59/cb226752e20d83598d7fdcabd7819570b0329a61db07cfbdd21b2ef546e3/SecretStorage-3.1.1-py3-none-any.whl",
"sha256": "7a119fb52a88e398dbb22a4b3eb39b779bfbace7e4153b7bc6e5954d86282a8a"
}
]
}
}

View File

@ -1,14 +1,70 @@
{
"name": "python3-setuptools",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} setuptools"
],
"sources": [
"build-commands": [],
"modules": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/ed/69/c805067de1feedbb98c53174b0f2df44cc05e0e9ee73bb85eebc59e508c6/setuptools-41.0.0.zip",
"sha256": "79d30254b6fe7a8e672e43cd85f13a9f3f2a50080bc81d851143e2219ef0dcb1"
"name": "python3-paramiko",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} paramiko"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/be/60/da377e1bed002716fb2d5d1d1cab720f298cb33ecff7bf7adea72788e4e4/cryptography-2.8.tar.gz",
"sha256": "3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/fa/aa/025a3ab62469b5167bc397837c9ffc486c42a97ef12ceaa6699d8f5a5416/bcrypt-3.1.7.tar.gz",
"sha256": "0b0069c752ec14172c5f78208f1863d7ad6755a6fae6fe76ec2c80d13be41e42"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz",
"sha256": "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/61/ab/2ac6dea8489fa713e2b4c6c5b549cc962dd4a842b5998d9e80cf8440b7cd/PyNaCl-1.3.0.tar.gz",
"sha256": "0c6100edd16fefd1557da078c7a31e7b7d7a52ce39fdca2bec29d4f7b6e7600c"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/d6/cf/ba7e2df852a2fc807d48b3f7bea46f741830be4f047a0712e6de3e95fb6a/cffi-1.13.0.tar.gz",
"sha256": "8fe230f612c18af1df6f348d02d682fe2c28ca0a6c3856c99599cdacae7cf226"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz",
"sha256": "a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl",
"sha256": "3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/4b/80/74dace9e48b0ef923633dfb5e48798f58a168e4734bca8ecfaf839ba051a/paramiko-2.6.0-py2.py3-none-any.whl",
"sha256": "99f0179bdc176281d21961a003ffdb2ec369daac1a1007241f53374e376576cf"
}
]
},
{
"name": "python3-setuptools",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} setuptools"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/6a/9a/50fadfd53ec909e4399b67c74cc7f4e883488035cfcdb90b685758fa8b34/setuptools-41.4.0-py2.py3-none-any.whl",
"sha256": "8d01f7ee4191d9fdcd9cc5796f75199deccb25b154eba82d44d6a042cf873670"
}
]
}
]
}

View File

@ -0,0 +1,78 @@
{
"name": "python3-wheels",
"buildsystem": "simple",
"build-commands": [],
"modules": [
{
"name": "python3-paramiko",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} paramiko"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/be/60/da377e1bed002716fb2d5d1d1cab720f298cb33ecff7bf7adea72788e4e4/cryptography-2.8.tar.gz",
"sha256": "3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/61/ab/2ac6dea8489fa713e2b4c6c5b549cc962dd4a842b5998d9e80cf8440b7cd/PyNaCl-1.3.0.tar.gz",
"sha256": "0c6100edd16fefd1557da078c7a31e7b7d7a52ce39fdca2bec29d4f7b6e7600c"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz",
"sha256": "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/fa/aa/025a3ab62469b5167bc397837c9ffc486c42a97ef12ceaa6699d8f5a5416/bcrypt-3.1.7.tar.gz",
"sha256": "0b0069c752ec14172c5f78208f1863d7ad6755a6fae6fe76ec2c80d13be41e42"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/d6/cf/ba7e2df852a2fc807d48b3f7bea46f741830be4f047a0712e6de3e95fb6a/cffi-1.13.0.tar.gz",
"sha256": "8fe230f612c18af1df6f348d02d682fe2c28ca0a6c3856c99599cdacae7cf226"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz",
"sha256": "a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl",
"sha256": "3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c"
},
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/4b/80/74dace9e48b0ef923633dfb5e48798f58a168e4734bca8ecfaf839ba051a/paramiko-2.6.0-py2.py3-none-any.whl",
"sha256": "99f0179bdc176281d21961a003ffdb2ec369daac1a1007241f53374e376576cf"
}
]
},
{
"name": "python3-setuptools",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} setuptools"
],
"sources": [
{
"type": "file",
"url": "https://files.pythonhosted.org/packages/6a/9a/50fadfd53ec909e4399b67c74cc7f4e883488035cfcdb90b685758fa8b34/setuptools-41.4.0-py2.py3-none-any.whl",
"sha256": "8d01f7ee4191d9fdcd9cc5796f75199deccb25b154eba82d44d6a042cf873670"
}
]
},
{
"name": "python3-wheels",
"buildsystem": "simple",
"build-commands": [
"pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} wheels"
],
"sources": []
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 384"><defs><style>.cls-1{fill:#515151;}.cls-2{fill:#e65100;}.cls-3{fill:#ff9800;}</style></defs><title>vorta</title><path class="cls-1" d="M586.52,335.52v96a48,48,0,0,1-48,48h-480a48,48,0,0,1-48-48v-96a48,48,0,0,1,48-48h480A48,48,0,0,1,586.52,335.52Zm-48-80a79.47,79.47,0,0,1,30.77,6.16L472.77,116.89a48,48,0,0,0-39.94-21.37H164.2a48,48,0,0,0-39.93,21.37L27.74,261.68a79.52,79.52,0,0,1,30.78-6.16Zm-48,96a32,32,0,1,0,32,32A32,32,0,0,0,490.52,351.52Zm-96,0a32,32,0,1,0,32,32A32,32,0,0,0,394.52,351.52Z" transform="translate(-10.52 -95.52)"/><circle class="cls-2" cx="384.5" cy="288" r="32"/><circle class="cls-3" cx="480" cy="288" r="32"/></svg>

After

Width:  |  Height:  |  Size: 734 B