AUR bearhub: fix stale source cache collision (pkgrel=10)

Use tag-specific tarball name bearhub-0.10.7-bearhub.6.tar.gz so makepkg
and AUR helpers do not reuse an outdated bearhub-0.10.7.tar.gz from cache.
Ignore makepkg artifacts under packaging/aur/.
This commit is contained in:
Sebastian Palencsar
2026-06-27 10:02:45 +02:00
parent c56b8a2473
commit da377aecdc
198 changed files with 4543 additions and 4644 deletions

View File

@@ -1,29 +0,0 @@
import os
from pathlib import Path
from typing import Optional
from bauh.api.paths import CONFIG_DIR, TEMP_DIR, CACHE_DIR, BINARIES_DIR, SHARED_FILES_DIR
from bauh.commons import resource
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
APPIMAGE_SHARED_DIR = f'{SHARED_FILES_DIR}/appimage'
INSTALLATION_DIR = f'{APPIMAGE_SHARED_DIR}/installed'
CONFIG_FILE = f'{CONFIG_DIR}/appimage.yml'
APPIMAGE_CONFIG_DIR = f'{CONFIG_DIR}/appimage'
UPDATES_IGNORED_FILE = f'{APPIMAGE_CONFIG_DIR}/updates_ignored.txt'
SYMLINKS_DIR = BINARIES_DIR
URL_COMPRESSED_DATABASES = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/appimage/dbs.tar.gz'
APPIMAGE_CACHE_DIR = f'{CACHE_DIR}/appimage'
DATABASE_APPS_FILE = f'{APPIMAGE_CACHE_DIR}/apps.db'
DATABASE_RELEASES_FILE = f'{APPIMAGE_CACHE_DIR}/releases.db'
DATABASES_TS_FILE = f'{APPIMAGE_CACHE_DIR}/dbs.ts'
DOWNLOAD_DIR = f'{TEMP_DIR}/appimage/download'
def get_icon_path() -> str:
return resource.get_path('img/appimage.svg', ROOT_DIR)
def get_default_manual_installation_file_dir() -> Optional[str]:
default_path = f'{Path.home()}/Downloads'
return default_path if os.path.isdir(default_path) else None

View File

@@ -1,18 +0,0 @@
from bauh.commons.config import YAMLConfigManager
from bauh.gems.appimage import CONFIG_FILE
class AppImageConfigManager(YAMLConfigManager):
def __init__(self):
super(AppImageConfigManager, self).__init__(config_file_path=CONFIG_FILE)
def get_default_config(self) -> dict:
return {
'database': {
'expiration': 60
},
'suggestions': {
'expiration': 24
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,181 +0,0 @@
import re
from io import StringIO
from re import Pattern
from typing import Optional, Iterable, Tuple
from bauh.api.abstract.model import SoftwarePackage, CustomSoftwareAction
from bauh.commons import resource
from bauh.gems.appimage import ROOT_DIR, INSTALLATION_DIR
from bauh.view.util.translation import I18n
class AppImage(SoftwarePackage):
__actions_local_installation: Optional[Tuple[CustomSoftwareAction, ...]] = None
__cached_attrs: Optional[Tuple[str, ...]] = None
__re_many_spaces: Optional[Pattern] = None
@classmethod
def actions_local_installation(cls) -> Tuple[CustomSoftwareAction, ...]:
if cls.__actions_local_installation is None:
cls.__actions_local_installation = (CustomSoftwareAction(i18n_label_key='appimage.custom_action.manual_update',
i18n_status_key='appimage.custom_action.manual_update.status',
i18n_description_key='appimage.custom_action.manual_update.desc',
manager_method='update_file',
requires_root=False,
icon_path=resource.get_path('img/refresh.svg', ROOT_DIR),
requires_confirmation=False),)
return cls.__actions_local_installation
@classmethod
def cached_attrs(cls) -> Tuple[str, ...]:
if cls.__cached_attrs is None:
cls.__cached_attrs = ('name', 'description', 'version', 'url_download', 'author', 'license', 'source',
'icon_path', 'repository', 'categories', 'imported', 'install_dir',
'symlink')
return cls.__cached_attrs
@classmethod
def re_many_spaces(cls) -> Pattern:
if cls.__re_many_spaces is None:
cls.__re_many_spaces = re.compile(r'\s+')
return cls.__re_many_spaces
def __init__(self, name: str = None, description: str = None, repository: str = None, source: str = None, version: str = None,
url_download: str = None, url_icon: str = None, url_screenshot: str = None, license: str = None, author: str = None,
categories=None, icon_path: str = None, installed: bool = False,
url_download_latest_version: str = None, local_file_path: str = None, imported: bool = False,
i18n: I18n = None, install_dir: str = None, updates_ignored: bool = False,
symlink: str = None, manual_update: bool = False, github: str = None, **kwargs):
super(AppImage, self).__init__(id=name, name=name, version=version, latest_version=version,
icon_url=url_icon, license=license, description=description,
installed=installed)
self.source = source
github_url = f"https://github.com/{github}" if github and not github.startswith("https://") else None
self.repository = repository if repository else (github_url if github_url else repository)
self.categories = (categories.split(',') if isinstance(categories, str) else categories) if categories else None
self.url_download = url_download
self.icon_path = icon_path
self.url_screenshot = url_screenshot
self.author = author
self.url_download_latest_version = url_download_latest_version
self.local_file_path = local_file_path
self.imported = imported
self.i18n = i18n
self.install_dir = install_dir
self.updates_ignored = updates_ignored
self.symlink = symlink
self.manual_update = manual_update # True when the user is manually installing/upgrading an AppImage file
def __repr__(self):
return f"{self.__class__.__name__} (name={self.name}, repository={self.repository})"
def can_be_installed(self):
return not self.installed and self.url_download
def has_history(self):
return self.installed and not self.imported
def has_info(self):
return self.installed if self.imported else True
def can_be_downgraded(self):
return self.installed and not self.imported
def get_type(self):
return 'AppImage'
def get_default_icon_path(self):
return self.get_type_icon_path()
def get_type_icon_path(self):
return resource.get_path('img/appimage.svg', ROOT_DIR)
def is_application(self):
return True
def get_data_to_cache(self) -> dict:
data = {}
for a in self.cached_attrs():
val = getattr(self, a)
if val:
data[a] = val
return data
def fill_cached_data(self, data: dict):
for a in self.cached_attrs():
val = data.get(a)
if val:
setattr(self, a, val)
def can_be_run(self) -> bool:
return self.installed
def get_publisher(self) -> str:
return self.author
def get_disk_cache_path(self) -> str:
if self.install_dir:
return self.install_dir
elif self.name:
return f'{INSTALLATION_DIR}/{self.name.lower()}'
def get_disk_icon_path(self):
return self.icon_path
def has_screenshots(self):
return not self.installed and self.url_screenshot
def get_name_tooltip(self) -> str:
if self.name and self.imported:
return '{} ({})'.format(self.name, self.i18n['imported'])
return self.name
def get_custom_actions(self) -> Optional[Iterable[CustomSoftwareAction]]:
if self.installed and self.imported:
return self.actions_local_installation()
def supports_backup(self) -> bool:
return False
def supports_ignored_updates(self) -> bool:
return self.installed and not self.imported
def is_update_ignored(self) -> bool:
return self.updates_ignored
def __eq__(self, other):
if isinstance(other, AppImage):
return self.name == other.name and self.local_file_path == other.local_file_path
def get_clean_name(self) -> Optional[str]:
if self.name:
return self.re_many_spaces().sub('-', self.name.lower().strip())
def to_desktop_entry(self) -> str:
de = StringIO()
de.write("[Desktop Entry]\nType=Application\nName={}\n".format(self.name))
if self.description:
de.write("Comment={}\n".format(self.description.replace('\n', ' ')))
if self.install_dir and self.local_file_path:
de.write('Exec="{}/{}"\n'.format(self.install_dir, self.local_file_path.split('/')[-1]))
if self.icon_path:
de.write('Icon={}\n'.format(self.icon_path))
if self.categories:
de.write('Categories={};\n'.format(';'.join((c for c in self.categories if c.lower() != 'imported'))))
de.write('Terminal=false')
de.seek(0)
return de.read()

View File

@@ -1,12 +0,0 @@
APP_ATTRS = ('name', 'description', 'repository', 'source', 'version', 'url_download', 'url_icon',
'url_screenshot', 'license', 'author', 'categories')
RELEASE_ATTRS = ('version', 'url_download', 'published_at')
SEARCH_APPS_BY_NAME_OR_DESCRIPTION = f"SELECT {','.join(APP_ATTRS)} FROM apps" + \
" WHERE lower(name) LIKE '%{}%' or lower(description) LIKE '%{}%'"
FIND_APP_ID_BY_REPO_AND_NAME = "SELECT id FROM apps WHERE lower(repository) = '{}' and lower(name) = '{}'"
FIND_APPS_BY_NAME = "SELECT name, repository, version, url_download FROM apps WHERE lower(name) IN ({})"
FIND_APPS_BY_NAME_ONLY_NAME = "SELECT name FROM apps WHERE lower(name) IN ({})"
FIND_APPS_BY_NAME_FULL = "SELECT {} FROM apps".format(','.join(APP_ATTRS)) + " WHERE lower(name) IN ({})"
FIND_RELEASES_BY_APP_ID = "SELECT {} FROM releases".format(','.join(RELEASE_ATTRS)) + " WHERE app_id = {}"

View File

@@ -1,335 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="24"
height="23.909061"
id="svg3832"
version="1.1"
inkscape:version="0.92.4 5da689c313, 2019-01-14"
sodipodi:docname="appimage.svg">
<defs
id="defs3834">
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3308-4-6-931-761-0"
id="linearGradient2975"
gradientUnits="userSpaceOnUse"
x1="24.3125"
y1="22.96875"
x2="24.3125"
y2="41.03125" />
<linearGradient
id="linearGradient3308-4-6-931-761-0">
<stop
id="stop2919-2"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop2921-76"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4222"
id="linearGradient2979"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.3704967,-0.3617496,0,33.508315,6.1670925)"
x1="7.6485429"
y1="26.437023"
x2="41.861729"
y2="26.437023" />
<linearGradient
id="linearGradient4222">
<stop
id="stop4224"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop4226"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3308-4-6-931-761"
id="linearGradient2982"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,0.9999987)"
x1="23.99999"
y1="4.999989"
x2="23.99999"
y2="43" />
<linearGradient
id="linearGradient3308-4-6-931-761">
<stop
id="stop2919"
style="stop-color:#ffffff;stop-opacity:1"
offset="0" />
<stop
id="stop2921"
style="stop-color:#ffffff;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3575"
id="radialGradient2985"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,1.0262008,-1.6561124,9.4072203e-4,-56.097482,-45.332325)"
cx="48.42384"
cy="-48.027504"
fx="48.42384"
fy="-48.027504"
r="38.212933" />
<linearGradient
id="linearGradient3575">
<stop
id="stop3577"
style="stop-color:#fafafa;stop-opacity:1"
offset="0" />
<stop
id="stop3579"
style="stop-color:#e6e6e6;stop-opacity:1"
offset="1" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3993"
id="radialGradient2990"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,2.0478765,-2.7410544,-8.6412258e-8,47.161382,-8.837436)"
cx="9.3330879"
cy="8.4497671"
fx="9.3330879"
fy="8.4497671"
r="19.99999" />
<linearGradient
id="linearGradient3993">
<stop
offset="0"
style="stop-color:#a3c0d0;stop-opacity:1"
id="stop3995" />
<stop
offset="1"
style="stop-color:#427da1;stop-opacity:1"
id="stop4001" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2508"
id="linearGradient2992"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,0.9674382)"
x1="14.048676"
y1="44.137306"
x2="14.048676"
y2="4.0000005" />
<linearGradient
id="linearGradient2508">
<stop
offset="0"
style="stop-color:#2e4a5a;stop-opacity:1"
id="stop2510" />
<stop
offset="1"
style="stop-color:#6e8796;stop-opacity:1"
id="stop2512" />
</linearGradient>
<radialGradient
cx="4.9929786"
cy="43.5"
r="2.5"
fx="4.9929786"
fy="43.5"
id="radialGradient2873-966-168"
xlink:href="#linearGradient3688-166-749"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" />
<linearGradient
id="linearGradient3688-166-749">
<stop
id="stop2883"
style="stop-color:#181818;stop-opacity:1"
offset="0" />
<stop
id="stop2885"
style="stop-color:#181818;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
cx="4.9929786"
cy="43.5"
r="2.5"
fx="4.9929786"
fy="43.5"
id="radialGradient2875-742-326"
xlink:href="#linearGradient3688-464-309"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" />
<linearGradient
id="linearGradient3688-464-309">
<stop
id="stop2889"
style="stop-color:#181818;stop-opacity:1"
offset="0" />
<stop
id="stop2891"
style="stop-color:#181818;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
x1="25.058096"
y1="47.027729"
x2="25.058096"
y2="39.999443"
id="linearGradient2877-634-617"
xlink:href="#linearGradient3702-501-757"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3702-501-757">
<stop
id="stop2895"
style="stop-color:#181818;stop-opacity:0"
offset="0" />
<stop
id="stop2897"
style="stop-color:#181818;stop-opacity:1"
offset="0.5" />
<stop
id="stop2899"
style="stop-color:#181818;stop-opacity:0"
offset="1" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.4375"
inkscape:cx="612.29775"
inkscape:cy="-202.44753"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1360"
inkscape:window-height="703"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
showborder="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata3837">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(-2,-22.090907)">
<g
id="g881"
transform="matrix(0.54545433,0,0,0.58268555,0.90909135,19.196452)">
<g
transform="matrix(1.1,0,0,0.4444449,-2.4000022,25.11107)"
id="g2036"
style="display:inline">
<g
transform="matrix(1.052632,0,0,1.285713,-1.263158,-13.42854)"
id="g3712"
style="opacity:0.4">
<rect
width="5"
height="7"
x="38"
y="40"
id="rect2801"
style="fill:url(#radialGradient2873-966-168);fill-opacity:1;stroke:none" />
<rect
width="5"
height="7"
x="-10"
y="-47"
transform="scale(-1)"
id="rect3696"
style="fill:url(#radialGradient2875-742-326);fill-opacity:1;stroke:none" />
<rect
width="28"
height="7.0000005"
x="10"
y="40"
id="rect3700"
style="fill:url(#linearGradient2877-634-617);fill-opacity:1;stroke:none" />
</g>
</g>
<rect
width="39"
height="39"
rx="2.2322156"
ry="2.2322156"
x="4.5"
y="5.4674392"
id="rect5505"
style="fill:url(#radialGradient2990);fill-opacity:1;stroke:url(#linearGradient2992);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
d="m 21,6.9687498 a 2.0165107,2.0165107 0 0 0 -2.03125,2.03125 V 12.96875 H 17.8125 a 2.0165107,2.0165107 0 0 0 -1.5,3.375 l 5.0625,5.75 c -0.06312,0.110777 -0.178724,0.246032 -0.21875,0.34375 -0.195898,0.478256 -0.25,0.83653 -0.25,1.21875 v 0.125 L 20.8125,23.6875 C 20.534322,23.409323 20.213169,23.162739 19.71875,22.96875 19.47154,22.87176 19.185456,22.791748 18.75,22.8125 c -0.435456,0.02075 -1.054055,0.210302 -1.46875,0.625 L 15.75,24.96875 c -0.414689,0.414689 -0.604245,1.033294 -0.625,1.46875 -0.02075,0.435456 0.05925,0.721537 0.15625,0.96875 C 15.475241,27.900677 15.721817,28.221821 16,28.5 l 0.09375,0.09375 h -0.125 c -0.382218,0 -0.740493,0.0541 -1.21875,0.25 -0.239128,0.09795 -0.538285,0.214988 -0.84375,0.53125 -0.305465,0.316262 -0.625,0.914788 -0.625,1.53125 v 2.1875 c 0,0.616465 0.319536,1.214989 0.625,1.53125 0.305464,0.316261 0.604622,0.433301 0.84375,0.53125 0.478256,0.195898 0.83653,0.25 1.21875,0.25 h 0.125 L 16,35.5 c -0.278175,0.278176 -0.52476,0.599329 -0.71875,1.09375 -0.09699,0.24721 -0.177003,0.533292 -0.15625,0.96875 0.02075,0.435458 0.210304,1.054058 0.625,1.46875 l 1.53125,1.53125 c 0.414691,0.414697 1.033292,0.604245 1.46875,0.625 0.435458,0.02076 0.721537,-0.05926 0.96875,-0.15625 0.494425,-0.19399 0.81557,-0.440568 1.09375,-0.71875 l 0.09375,-0.09375 v 0.125 c 0,0.38222 0.0541,0.740495 0.25,1.21875 0.09795,0.239127 0.214989,0.538285 0.53125,0.84375 0.316261,0.305465 0.914783,0.625 1.53125,0.625 h 2.1875 c 0.616466,0 1.214989,-0.319534 1.53125,-0.625 0.316261,-0.305466 0.433302,-0.604622 0.53125,-0.84375 0.195896,-0.478255 0.25,-0.836532 0.25,-1.21875 v -0.125 l 0.09375,0.09375 c 0.278176,0.278175 0.599329,0.52476 1.09375,0.71875 0.24721,0.09699 0.533292,0.177003 0.96875,0.15625 0.435458,-0.02075 1.054058,-0.210304 1.46875,-0.625 L 32.875,39.03125 C 33.289697,38.616559 33.479245,37.997958 33.5,37.5625 33.52076,37.127042 33.44074,36.840963 33.34375,36.59375 33.14976,36.099325 32.903182,35.77818 32.625,35.5 l -0.09375,-0.09375 h 0.125 c 0.38222,0 0.740494,-0.0541 1.21875,-0.25 0.239128,-0.09795 0.538286,-0.214988 0.84375,-0.53125 0.305464,-0.316262 0.625,-0.914787 0.625,-1.53125 v -2.1875 c 0,-0.61646 -0.319535,-1.214987 -0.625,-1.53125 -0.305465,-0.316263 -0.604621,-0.433301 -0.84375,-0.53125 -0.478257,-0.195898 -0.836532,-0.25 -1.21875,-0.25 h -0.125 L 32.625,28.5 c 0.278177,-0.278177 0.52476,-0.599329 0.71875,-1.09375 C 33.44074,27.15904 33.520753,26.872957 33.5,26.4375 33.47925,26.002043 33.289697,25.383443 32.875,24.96875 L 31.34375,23.4375 c -0.414688,-0.414694 -1.03329,-0.604245 -1.46875,-0.625 -0.43546,-0.02076 -0.721537,0.05925 -0.96875,0.15625 -0.494426,0.193991 -0.815572,0.44057 -1.09375,0.71875 l -0.09375,0.09375 v -0.125 c 0,-0.382218 -0.0541,-0.740493 -0.25,-1.21875 -0.09112,-0.22245 -0.228127,-0.500183 -0.5,-0.78125 l 4.71875,-5.3125 a 2.0165107,2.0165107 0 0 0 -1.5,-3.375 H 29.03125 V 8.9999998 A 2.0165107,2.0165107 0 0 0 27,6.9687498 Z M 24.3125,31.25 c 0.427097,0 0.75,0.322904 0.75,0.75 0,0.427096 -0.322903,0.75 -0.75,0.75 -0.427094,0 -0.75,-0.322906 -0.75,-0.75 0,-0.427094 0.322906,-0.75 0.75,-0.75 z"
id="path4294-1"
style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00178742;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
d="m 20.90625,8.0312498 a 0.96385067,0.96385067 0 0 0 -0.875,0.96875 V 14.03125 H 17.8125 A 0.96385067,0.96385067 0 0 0 17.09375,15.625 l 5.78125,6.53125 c -0.158814,0.0616 -0.341836,0.0951 -0.4375,0.1875 -0.169161,0.163386 -0.252971,0.323419 -0.3125,0.46875 -0.119058,0.290663 -0.15625,0.566746 -0.15625,0.84375 V 25.3125 C 21.718163,25.40233 21.485871,25.509772 21.25,25.625 l -1.1875,-1.1875 c -0.199651,-0.19965 -0.421433,-0.352095 -0.71875,-0.46875 -0.148659,-0.05833 -0.329673,-0.104846 -0.5625,-0.09375 -0.232827,0.0111 -0.53583,0.09833 -0.75,0.3125 L 16.5,25.71875 c -0.214168,0.214168 -0.301403,0.517173 -0.3125,0.75 -0.0111,0.232827 0.03542,0.41384 0.09375,0.5625 0.116655,0.297321 0.269096,0.519099 0.46875,0.71875 l 1.1875,1.1875 c -0.115228,0.235871 -0.222668,0.468163 -0.3125,0.71875 h -1.65625 c -0.277003,0 -0.553087,0.03719 -0.84375,0.15625 -0.145332,0.05953 -0.305363,0.143338 -0.46875,0.3125 -0.163387,0.169162 -0.3125,0.46403 -0.3125,0.78125 v 2.1875 c 0,0.317221 0.149114,0.612089 0.3125,0.78125 0.163386,0.169161 0.323419,0.252971 0.46875,0.3125 0.290663,0.119058 0.566746,0.15625 0.84375,0.15625 H 17.625 c 0.08983,0.250587 0.197272,0.482879 0.3125,0.71875 L 16.75,36.25 c -0.199649,0.19965 -0.352095,0.421432 -0.46875,0.71875 -0.05833,0.148659 -0.104846,0.329672 -0.09375,0.5625 0.0111,0.232828 0.09833,0.535831 0.3125,0.75 l 1.53125,1.53125 c 0.214168,0.214172 0.517172,0.301403 0.75,0.3125 0.232828,0.0111 0.41384,-0.03542 0.5625,-0.09375 0.29732,-0.116655 0.519098,-0.269096 0.71875,-0.46875 L 21.25,38.375 c 0.235871,0.115228 0.468164,0.222668 0.71875,0.3125 v 1.65625 c 0,0.277003 0.03719,0.553087 0.15625,0.84375 0.05953,0.145331 0.143339,0.305364 0.3125,0.46875 0.169161,0.163386 0.464028,0.3125 0.78125,0.3125 h 2.1875 c 0.317221,0 0.612089,-0.149113 0.78125,-0.3125 0.169161,-0.163387 0.252971,-0.323419 0.3125,-0.46875 0.119057,-0.290663 0.15625,-0.566748 0.15625,-0.84375 V 38.6875 c 0.250586,-0.08983 0.482879,-0.197272 0.71875,-0.3125 l 1.1875,1.1875 c 0.19965,0.199649 0.421432,0.352095 0.71875,0.46875 0.148659,0.05833 0.329672,0.104846 0.5625,0.09375 0.232828,-0.0111 0.535831,-0.09833 0.75,-0.3125 L 32.125,38.28125 c 0.214172,-0.214168 0.301403,-0.517172 0.3125,-0.75 0.0111,-0.232828 -0.03542,-0.41384 -0.09375,-0.5625 C 32.227095,36.67143 32.074654,36.449652 31.875,36.25 L 30.6875,35.0625 C 30.802728,34.82663 30.910168,34.594337 31,34.34375 h 1.65625 c 0.277004,0 0.553087,-0.03719 0.84375,-0.15625 0.145332,-0.05953 0.305364,-0.143339 0.46875,-0.3125 0.163386,-0.169161 0.3125,-0.46403 0.3125,-0.78125 v -2.1875 c 0,-0.317219 -0.149114,-0.612088 -0.3125,-0.78125 C 33.805364,29.955838 33.645332,29.872029 33.5,29.8125 33.209336,29.693442 32.933253,29.65625 32.65625,29.65625 H 31 C 30.91017,29.405663 30.802728,29.17337 30.6875,28.9375 L 31.875,27.75 c 0.19965,-0.19965 0.352095,-0.421432 0.46875,-0.71875 0.05833,-0.148659 0.104846,-0.329672 0.09375,-0.5625 -0.0111,-0.232828 -0.09833,-0.535831 -0.3125,-0.75 L 30.59375,24.1875 c -0.214167,-0.21417 -0.517171,-0.301403 -0.75,-0.3125 -0.232829,-0.0111 -0.41384,0.03542 -0.5625,0.09375 -0.29732,0.116656 -0.519099,0.269097 -0.71875,0.46875 L 27.375,25.625 c -0.235871,-0.115228 -0.468163,-0.222668 -0.71875,-0.3125 v -1.65625 c 0,-0.277003 -0.03719,-0.553087 -0.15625,-0.84375 -0.05953,-0.145332 -0.143338,-0.305363 -0.3125,-0.46875 -0.169162,-0.163387 -0.46403,-0.3125 -0.78125,-0.3125 H 25.25 L 30.90625,15.625 A 0.96385067,0.96385067 0 0 0 30.1875,14.03125 H 27.96875 V 8.9999998 A 0.96385067,0.96385067 0 0 0 27,8.0312498 h -6 a 0.96385067,0.96385067 0 0 0 -0.09375,0 z M 24.3125,30.1875 c 1.002113,0 1.8125,0.810388 1.8125,1.8125 0,1.002112 -0.810387,1.8125 -1.8125,1.8125 C 23.31039,33.8125 22.5,33.002111 22.5,32 c 0,-1.002111 0.81039,-1.8125 1.8125,-1.8125 z"
id="path4294"
style="display:inline;overflow:visible;visibility:visible;opacity:0.05;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00178742;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<path
d="M 21,8.9999996 V 15 H 17.8125 L 24,22 30.1875,15 H 27 V 8.9999996 Z M 23.21875,23 c -0.172892,0 -0.28125,0.294922 -0.28125,0.65625 V 25.9375 C 22.24145,26.095996 21.585954,26.379869 21,26.75 l -1.625,-1.625 c -0.255498,-0.255497 -0.533998,-0.372253 -0.65625,-0.25 l -1.53125,1.53125 c -0.122254,0.122254 -0.0055,0.400753 0.25,0.65625 l 1.625,1.625 c -0.37013,0.585953 -0.654003,1.24145 -0.8125,1.9375 h -2.28125 c -0.361328,0 -0.65625,0.108357 -0.65625,0.28125 v 2.1875 c 0,0.172892 0.294922,0.28125 0.65625,0.28125 H 18.25 c 0.158497,0.69605 0.44237,1.351546 0.8125,1.9375 l -1.625,1.625 c -0.255497,0.255498 -0.372254,0.533997 -0.25,0.65625 l 1.53125,1.53125 c 0.122252,0.122254 0.400752,0.0055 0.65625,-0.25 L 21,37.25 c 0.585954,0.37013 1.24145,0.654002 1.9375,0.8125 v 2.28125 C 22.9375,40.705077 23.045858,41 23.21875,41 h 2.1875 c 0.172893,0 0.28125,-0.294924 0.28125,-0.65625 V 38.0625 c 0.69605,-0.158498 1.351546,-0.44237 1.9375,-0.8125 l 1.625,1.625 c 0.255498,0.255497 0.533997,0.372254 0.65625,0.25 l 1.53125,-1.53125 c 0.122254,-0.122252 0.0055,-0.400752 -0.25,-0.65625 l -1.625,-1.625 c 0.370129,-0.585954 0.654003,-1.24145 0.8125,-1.9375 h 2.28125 c 0.361329,0 0.65625,-0.108358 0.65625,-0.28125 v -2.1875 c 0,-0.172893 -0.294921,-0.28125 -0.65625,-0.28125 H 30.375 c -0.158497,-0.69605 -0.442371,-1.351547 -0.8125,-1.9375 l 1.625,-1.625 c 0.255497,-0.255497 0.372254,-0.533997 0.25,-0.65625 L 29.90625,24.875 C 29.783997,24.752745 29.505498,24.8695 29.25,25.125 L 27.625,26.75 C 27.039046,26.379869 26.38355,26.095996 25.6875,25.9375 V 23.65625 C 25.6875,23.294922 25.579143,23 25.40625,23 Z m 1.09375,6.21875 c 1.528616,0 2.78125,1.252635 2.78125,2.78125 0,1.528615 -1.252634,2.78125 -2.78125,2.78125 -1.528614,0 -2.78125,-1.252635 -2.78125,-2.78125 0,-1.528615 1.252636,-2.78125 2.78125,-2.78125 z"
id="path2317"
style="display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient2985);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00178742;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
<rect
width="36.999985"
height="37.000011"
rx="1.365193"
ry="1.365193"
x="5.4999981"
y="6.4999886"
id="rect6741"
style="opacity:0.4;fill:none;stroke:url(#linearGradient2982);stroke-width:0.99999976;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<path
d="M 28.926376,15.466668 24,21.177578 18.963089,15.5 H 21.5 V 9.4999996 h 5 V 15.5 l 2.426376,-0.03333 z"
id="path2777"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient2979);stroke-width:0.99829447;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
inkscape:connector-curvature="0" />
<path
d="m 23.4375,23.46875 c -0.01166,0.05381 -0.03125,0.100205 -0.03125,0.1875 v 2.28125 a 0.48185467,0.48185467 0 0 1 -0.375,0.46875 c -0.638467,0.145384 -1.238423,0.407111 -1.78125,0.75 a 0.48185467,0.48185467 0 0 1 -0.59375,-0.0625 l -1.625,-1.625 C 18.9779,25.4154 18.9477,25.40242 18.90625,25.375 l -1.21875,1.21875 c 0.02742,0.04145 0.0404,0.07165 0.09375,0.125 l 1.625,1.625 a 0.48185467,0.48185467 0 0 1 0.0625,0.59375 c -0.342888,0.542826 -0.604615,1.142782 -0.75,1.78125 a 0.48185467,0.48185467 0 0 1 -0.46875,0.375 h -2.28125 c -0.08729,0 -0.133695,0.01959 -0.1875,0.03125 v 1.75 c 0.05381,0.01166 0.100205,0.03125 0.1875,0.03125 H 18.25 a 0.48185467,0.48185467 0 0 1 0.46875,0.375 c 0.145385,0.638468 0.407112,1.238423 0.75,1.78125 a 0.48185467,0.48185467 0 0 1 -0.0625,0.59375 l -1.625,1.625 c -0.05335,0.05335 -0.06633,0.08355 -0.09375,0.125 l 1.21875,1.21875 c 0.04145,-0.02742 0.07165,-0.0404 0.125,-0.09375 l 1.625,-1.625 A 0.48185467,0.48185467 0 0 1 21.25,36.84375 c 0.542827,0.342888 1.142781,0.604614 1.78125,0.75 a 0.48185467,0.48185467 0 0 1 0.375,0.46875 v 2.28125 c 0,0.08729 0.01959,0.133695 0.03125,0.1875 h 1.75 c 0.01166,-0.0538 0.03125,-0.100206 0.03125,-0.1875 V 38.0625 a 0.48185467,0.48185467 0 0 1 0.375,-0.46875 c 0.638469,-0.145386 1.238423,-0.407112 1.78125,-0.75 a 0.48185467,0.48185467 0 0 1 0.59375,0.0625 l 1.625,1.625 c 0.05335,0.05335 0.08355,0.06633 0.125,0.09375 l 1.21875,-1.21875 c -0.02742,-0.04145 -0.0404,-0.07165 -0.09375,-0.125 l -1.625,-1.625 a 0.48185467,0.48185467 0 0 1 -0.0625,-0.59375 c 0.342888,-0.542828 0.604615,-1.142783 0.75,-1.78125 a 0.48185467,0.48185467 0 0 1 0.46875,-0.375 h 2.28125 c 0.08729,0 0.133695,-0.01959 0.1875,-0.03125 v -1.75 c -0.0538,-0.01166 -0.100204,-0.03125 -0.1875,-0.03125 H 30.375 a 0.48185467,0.48185467 0 0 1 -0.46875,-0.375 c -0.145385,-0.638467 -0.407113,-1.238424 -0.75,-1.78125 a 0.48185467,0.48185467 0 0 1 0.0625,-0.59375 l 1.625,-1.625 c 0.05335,-0.05335 0.06633,-0.08355 0.09375,-0.125 L 29.71875,25.375 c -0.04145,0.02742 -0.07165,0.0404 -0.125,0.09375 l -1.625,1.625 a 0.48185467,0.48185467 0 0 1 -0.59375,0.0625 c -0.542827,-0.342889 -1.142783,-0.604616 -1.78125,-0.75 a 0.48185467,0.48185467 0 0 1 -0.375,-0.46875 v -2.28125 c 0,-0.0873 -0.01959,-0.133695 -0.03125,-0.1875 z m 0.875,5.28125 c 1.791829,0 3.25,1.458172 3.25,3.25 0,1.791828 -1.458171,3.25 -3.25,3.25 -1.791827,0 -3.25,-1.458172 -3.25,-3.25 0,-1.791828 1.458173,-3.25 3.25,-3.25 z"
id="path4243"
style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient2975);stroke-width:1;stroke-opacity:1;marker:none;enable-background:accumulate"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1,128 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
width="512"
height="512"
viewBox="0 0 511.99998 512"
xml:space="preserve"
sodipodi:docname="refresh.svg"
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
id="metadata45"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs43" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="739"
id="namedview41"
showgrid="false"
showborder="true"
inkscape:zoom="0.48437083"
inkscape:cx="133.71431"
inkscape:cy="289.92474"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="Capa_1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:document-rotation="0" />
<g
id="g8"
transform="matrix(1.0938971,0,0,1.0217723,-10.489433,7.0809411)"
style="fill:#3991e9;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none">
<g
id="g6"
style="fill:#3991e9;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none">
<path
d="m 55.323,203.641 c 15.664,0 29.813,-9.405 35.872,-23.854 25.017,-59.604 83.842,-101.61 152.42,-101.61 37.797,0 72.449,12.955 100.23,34.442 l -21.775,3.371 c -7.438,1.153 -13.224,7.054 -14.232,14.512 -1.01,7.454 3.008,14.686 9.867,17.768 l 119.746,53.872 c 5.249,2.357 11.33,1.904 16.168,-1.205 4.83,-3.114 7.764,-8.458 7.796,-14.208 l 0.621,-131.943 c 0.042,-7.506 -4.851,-14.144 -12.024,-16.332 -7.185,-2.188 -14.947,0.589 -19.104,6.837 L 414.403,70.096 C 370.398,26.778 310.1,0 243.615,0 142.806,0 56.133,61.562 19.167,149.06 c -5.134,12.128 -3.84,26.015 3.429,36.987 7.269,10.976 19.556,17.594 32.727,17.594 z"
id="path2"
inkscape:connector-curvature="0"
style="fill:#3991e9;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 464.635,301.184 c -7.27,-10.977 -19.558,-17.594 -32.728,-17.594 -15.664,0 -29.813,9.405 -35.872,23.854 -25.018,59.604 -83.843,101.61 -152.42,101.61 -37.798,0 -72.45,-12.955 -100.232,-34.442 l 21.776,-3.369 c 7.437,-1.153 13.223,-7.055 14.233,-14.514 1.009,-7.453 -3.008,-14.686 -9.867,-17.768 L 49.779,285.089 c -5.25,-2.356 -11.33,-1.905 -16.169,1.205 -4.829,3.114 -7.764,8.458 -7.795,14.207 l -0.622,131.943 c -0.042,7.506 4.85,14.144 12.024,16.332 7.185,2.188 14.948,-0.59 19.104,-6.839 l 16.505,-24.805 c 44.004,43.32 104.303,70.098 170.788,70.098 100.811,0 187.481,-61.561 224.446,-149.059 5.137,-12.128 3.843,-26.014 -3.425,-36.987 z"
id="path4"
inkscape:connector-curvature="0"
style="fill:#3991e9;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none" />
</g>
</g>
<g
id="g10"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g12"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g14"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g16"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g18"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g20"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g22"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g24"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g26"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g28"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g30"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g32"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g34"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g36"
transform="translate(-15.027876,-464.19647)">
</g>
<g
id="g38"
transform="translate(-15.027876,-464.19647)">
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -1,54 +0,0 @@
appimage.config.database.expiration=Database expiration
appimage.config.database.expiration.tip=It defines the period (in minutes) in which the database will be considered up to date during the initialization process. Use 0 if you always want to update it.
appimage.config.suggestions.expiration=Suggestions expiration
appimage.config.suggestions.expiration.tip=It defines the period (in hours) in which the suggestions stored in disc will be considered up to date. Use 0 if you always want to update them.
appimage.custom_action.install_file=Install AppImage file
appimage.custom_action.install_file.desc=Installs an AppImage file on the system
appimage.custom_action.install_file.details=AppImage installation details
appimage.custom_action.install_file.invalid_file=You must define a valid AppImage file
appimage.custom_action.install_file.invalid_name=You must define a name for the application
appimage.custom_action.install_file.status=Installing AppImage file
appimage.custom_action.manual_update=Upgrade file
appimage.custom_action.manual_update.desc=Replaces the installed AppImage file by another one
appimage.custom_action.manual_update.details=AppImage upgrade details
appimage.custom_action.manual_update.status=Upgrading
appimage.custom_action.self_install=Install Bearhub
appimage.custom_action.self_install.desc=Installs Bearhub on the system and adds its icons to the menu
appimage.custom_action.self_install.status=Installing Bearhub
appimage.custom_action.update_db=Update database
appimage.custom_action.update_db.desc=Downloads updated files from the AppImage applications database
appimage.custom_action.update_db.status=Updating database
appimage.downgrade.first_version={} és a la seva primera versió publicada
appimage.downgrade.impossible.body={} té només una versió publicada.
appimage.downgrade.impossible.title=No sha pogut revertir la versió
appimage.downgrade.install_version=No sha pogut instal·lar la versió {} ({})
appimage.downgrade.unknown_version.body=No sha pogut identificar la versió actual de {} a lhistorial de versions
appimage.download.error=No sha pogut baixar el fitxer {}. El servidor del fitxer pot estar inactiu.
appimage.download.no_url=No download URL associated with the app {app}
appimage.error.uninstall_current_version=It was not possible to uninstall the current version of {}
appimage.history.0_version=versió
appimage.history.1_published_at=data
appimage.history.2_url_download=URL del fitxer
appimage.info.icon_path=icona
appimage.info.imported.false=No
appimage.info.imported.true=Yes
appimage.info.install_dir=Installation directory
appimage.info.repository=Repositori
appimage.info.symlink=Symlink
appimage.info.url_download=URL del fitxer
appimage.install.appimagelauncher.error={appimgl} no permet la instal·lació de {app}. Desinstal·leu {appimgl}, reinicieu el sistema i torneu a provar dinstal·lar {app}.
appimage.install.desktop_entry=Sestà creant una drecera del menú
appimage.install.extract=Sestà extraient el contingut de {}
appimage.install.imported.rename_error=It was not possible to move the file {} to {}
appimage.install.permission=Sestà concedint el permís dexecució a {}
appimage.update_database.deleting_old=Removing old files
appimage.update_database.downloading=Downloading database files
appimage.update_database.uncompressing=Uncompressing files
appimage.upgrade.failed=It was not possible to upgrade the following applications: {apps}
appimage.task.db_update=Actualització de bases de dades
appimage.task.db_update.checking=Checking for updates
appimage.task.symlink_check=Checking symlinks
appimage.uninstall.error.remove_folder=No sha pogut suprimir el directori dinstal·lació de laplicació {}
appimage.warning.missing_db_files={appimage} database files were not found. Some actions will not work properly.
gem.appimage.info=Aplicacions publicades a https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,54 +0,0 @@
appimage.config.database.expiration=Ablauf der Datenbank
appimage.config.database.expiration.tip=Er definiert den Zeitraum (in Minuten), in dem die Datenbank während des Initialisierungsprozesses als aktuell angesehen wird. Verwenden Sie 0, wenn Sie sie immer aktualisieren wollen.
appimage.config.suggestions.expiration=Ablauf der Vorschläge
appimage.config.suggestions.expiration.tip=Er definiert den Zeitraum (in Stunden), in dem die, auf dem Datenträger gespeicherten, Vorschläge als aktuell angesehen werden. Verwenden Sie 0, wenn Sie sie immer aktualisieren wollen.
appimage.custom_action.install_file=AppImage-Datei installieren
appimage.custom_action.install_file.desc=Installiert eine AppImage-Datei auf dem System
appimage.custom_action.install_file.details=Details zur AppImage-Installation
appimage.custom_action.install_file.invalid_file=Sie müssen eine gültige AppImage-Datei angeben
appimage.custom_action.install_file.invalid_name=Sie müssen einen Namen für die Anwendung festlegen
appimage.custom_action.install_file.status=Installation der AppImage-Datei
appimage.custom_action.manual_update=Datei upgraden
appimage.custom_action.manual_update.desc=Ersetzt die installierte AppImage-Datei durch eine andere
appimage.custom_action.manual_update.details=Details zum AppImage-Upgrade
appimage.custom_action.manual_update.status=Upgrade von
appimage.custom_action.self_install=Bearhub installieren
appimage.custom_action.self_install.desc=Installiert Bearhub auf dem System und fügt seine Symbole in das Menü ein
appimage.custom_action.self_install.status=Installation von Bearhub
appimage.custom_action.update_db=Datenbank aktualisieren
appimage.custom_action.update_db.desc=Lädt aktualisierte Dateien aus der AppImage-Anwendungsdatenbank herunter
appimage.custom_action.update_db.status=Aktualisierung der Datenbank
appimage.downgrade.first_version={} ist in der ersten veröffentlichten Version
appimage.downgrade.impossible.body={} hat nur eine veröffentliche Version
appimage.downgrade.impossible.title=Downgrade nicht möglich
appimage.downgrade.install_version=Die Installation der Version {} ({}) war nicht möglich
appimage.downgrade.unknown_version.body={} aktuelle Version wurde im Versionsverlauf nicht gefunden
appimage.download.error=Es war nicht möglich, die Datei {} herunterzuladen. Der Dateiserver kann ausgefallen sein.
appimage.download.no_url=Keine Download-URL für die Anwendung {app} zugeordnet
appimage.error.uninstall_current_version=Es war nicht möglich, die aktuelle Version von {} zu deinstallieren.
appimage.history.0_version=Version
appimage.history.1_published_at=Datum
appimage.history.2_url_download=Datei-URL
appimage.info.icon_path=Symbol
appimage.info.imported.false=Nein
appimage.info.imported.true=Ja
appimage.info.install_dir=Installationsverzeichnis
appimage.info.repository=Repository
appimage.info.symlink=Symlink
appimage.info.url_download=Datei-URL
appimage.install.appimagelauncher.error={appimgl} lässt nicht zu, dass {app} installiert wird. Deinstallieren Sie {appimgl}, starten Sie Ihr System neu und versuchen Sie erneut, {app} zu installieren.
appimage.install.desktop_entry=Ein Tastenkürzel für das Menü festlegen
appimage.install.extract=Extrahieren des Inhalts von {}
appimage.install.imported.rename_error=Es war nicht möglich, die Datei {} nach {} zu verschieben
appimage.install.permission=Erteilung der Ausführungsberechtigung für {}
appimage.update_database.deleting_old=Entfernen von alten Dateien
appimage.update_database.downloading=Herunterladen von Datenbankdateien
appimage.update_database.uncompressing=Dekomprimierung von Dateien
appimage.upgrade.failed=Es war nicht möglich, die folgenden Anwendungen upzugraden: {Anwendungen}
appimage.task.db_update=Aktualisierung der Datenbanken
appimage.task.db_update.checking=Überprüfung auf Aktualisierungen
appimage.task.symlink_check=Überprüfung der Symlinks
appimage.uninstall.error.remove_folder=Das Installationsverzeichnis der Anwendung konnte nicht entfernt werden {}
appimage.warning.missing_db_files={appimage} Datenbankdateien wurden nicht gefunden. Einige Aktionen werden nicht richtig funktionieren.
gem.appimage.info=Anwendungen veröffentlicht auf https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,54 +0,0 @@
appimage.config.database.expiration=Database expiration
appimage.config.database.expiration.tip=It defines the period (in minutes) in which the database will be considered up to date during the initialization process. Use 0 if you always want to update it.
appimage.config.suggestions.expiration=Suggestions expiration
appimage.config.suggestions.expiration.tip=It defines the period (in hours) in which the suggestions stored in disc will be considered up to date. Use 0 if you always want to update them.
appimage.custom_action.install_file=Install AppImage file
appimage.custom_action.install_file.desc=Installs an AppImage file on the system
appimage.custom_action.install_file.details=AppImage installation details
appimage.custom_action.install_file.invalid_file=You must define a valid AppImage file
appimage.custom_action.install_file.invalid_name=You must define a name for the application
appimage.custom_action.install_file.status=Installing AppImage file
appimage.custom_action.manual_update=Upgrade file
appimage.custom_action.manual_update.desc=Replaces the installed AppImage file by another one
appimage.custom_action.manual_update.details=AppImage upgrade details
appimage.custom_action.manual_update.status=Upgrading
appimage.custom_action.self_install=Install Bearhub
appimage.custom_action.self_install.desc=Installs Bearhub on the system and adds its icons to the menu
appimage.custom_action.self_install.status=Installing Bearhub
appimage.custom_action.update_db=Update database
appimage.custom_action.update_db.desc=Downloads updated files from the AppImage applications database
appimage.custom_action.update_db.status=Updating database
appimage.downgrade.first_version={} is in its first published version
appimage.downgrade.impossible.body={} has only one published version.
appimage.downgrade.impossible.title=Impossible to downgrade
appimage.downgrade.install_version=It was not possible to install the version {} ({})
appimage.downgrade.unknown_version.body={} current version was not found in its release history
appimage.download.error=It was not possible to download the file {}. The file server can be down.
appimage.download.no_url=No download URL associated with the app {app}
appimage.error.uninstall_current_version=It was not possible to uninstall the current version of {}
appimage.history.0_version=version
appimage.history.1_published_at=date
appimage.history.2_url_download=File URL
appimage.info.icon_path=icon
appimage.info.imported.false=No
appimage.info.imported.true=Yes
appimage.info.install_dir=Installation directory
appimage.info.repository=Repository
appimage.info.symlink=Symlink
appimage.info.url_download=File URL
appimage.install.appimagelauncher.error={appimgl} is not allowing {app} to be installed. Uninstall {appimgl}, reboot your system and try to install {app} again.
appimage.install.desktop_entry=Generating a menu shortcut
appimage.install.extract=Extracting the content from {}
appimage.install.imported.rename_error=It was not possible to move the file {} to {}
appimage.install.permission=Giving execution permission to {}
appimage.update_database.deleting_old=Removing old files
appimage.update_database.downloading=Downloading database files
appimage.update_database.uncompressing=Uncompressing files
appimage.upgrade.failed=It was not possible to upgrade the following applications: {apps}
appimage.task.db_update=Updating databases
appimage.task.db_update.checking=Checking for updates
appimage.task.symlink_check=Checking symlinks
appimage.uninstall.error.remove_folder=Could not remove the application installation directory {}
appimage.warning.missing_db_files={appimage} database files were not found. Some actions will not work properly.
gem.appimage.info=Applications published at https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,54 +0,0 @@
appimage.config.database.expiration=Expiración de la base de datos
appimage.config.database.expiration.tip=Define el período (en minutos) en el que la base de datos será considerada actualizada durante el proceso de inicialización. Use 0 si siempre desea actualizarla.
appimage.config.suggestions.expiration=Expiración de sugerencias
appimage.config.suggestions.expiration.tip=Define el período (en horas) en el que la sugerencias almacenadas en disco seran consideradas actualizadas. Use 0 si desea siempre actualizarlas.
appimage.custom_action.install_file=Instalar archivo AppImage
appimage.custom_action.install_file.desc=Instala un archivo AppImage en el sistema
appimage.custom_action.install_file.details=Detalles de instalación de AppImage
appimage.custom_action.install_file.invalid_file=Debe definir un archivo AppImage válido
appimage.custom_action.install_file.invalid_name=Debe definir un nombre para la aplicación
appimage.custom_action.install_file.status=Instalando archivo AppImage
appimage.custom_action.manual_update=Actualizar archivo
appimage.custom_action.manual_update.desc=Reemplaza el archivo AppImage instalado por otro
appimage.custom_action.manual_update.details=Detalles de actualización de AppImage
appimage.custom_action.manual_update.status=Actualizando
appimage.custom_action.self_install=Instalar Bearhub
appimage.custom_action.self_install.desc=Instala Bearhub en el sistema y agrega sus íconos al menú
appimage.custom_action.self_install.status=Instalando Bearhub
appimage.custom_action.update_db=Actualizar base de datos
appimage.custom_action.update_db.desc=Descarga archivos actualizados de la base de datos de aplicaciones AppImage
appimage.custom_action.update_db.status=Actualizando base de datos
appimage.downgrade.first_version={} está en su primera versión publicada
appimage.downgrade.impossible.body={} solo tiene una versión publicada.
appimage.downgrade.impossible.title=Imposible revertir la versión
appimage.downgrade.install_version=No fue posible instalar la versión {} ({})
appimage.downgrade.unknown_version.body=No fue posible identificar la versión actual de {} en su historial de versiones
appimage.download.error=No fue posible descargar el archivo {}. El servidor del archivo puede estar inactivo.
appimage.download.no_url=No hay URL de descarga asociada a la aplicación {app}
appimage.error.uninstall_current_version=It was not possible to uninstall the current version of {}
appimage.history.0_version=versión
appimage.history.1_published_at=fecha
appimage.history.2_url_download=URL del archivo
appimage.info.icon_path=icono
appimage.info.imported.false=No
appimage.info.imported.true=Sí
appimage.info.install_dir=Directorio de instalación
appimage.info.repository=Repositorio
appimage.info.symlink=Link simbólico
appimage.info.url_download=URL del archivo
appimage.install.appimagelauncher.error={appimgl} no permite la instalación de {app}. Desinstale {appimgl}, reinicie su sistema e intente instalar {app} nuevamente.
appimage.install.desktop_entry=Creando un atajo en el menú
appimage.install.extract=Extrayendo el contenido de {}
appimage.install.imported.rename_error=No fue posible mover el archivo {} a {}
appimage.install.permission=Concediendo permiso de ejecución a {}
appimage.update_database.deleting_old=Eliminando archivos antiguos
appimage.update_database.downloading=Descargando archivos de la base de datos
appimage.update_database.uncompressing=Descomprindo archivos
appimage.upgrade.failed=No fue posible actualizar las siguientes aplicaciones: {apps}
appimage.task.db_update=Actualizando base de datos
appimage.task.db_update.checking=Buscando actualizaciones
appimage.task.symlink_check=Verificando links simbólicos
appimage.uninstall.error.remove_folder=No se pudo eliminar el directorio de instalación de la aplicación {}
appimage.warning.missing_db_files=No se encontraron archivos de la base de datos {appimage}. Algunas acciones no funcionarán correctamente.
gem.appimage.info=Aplicativos publicados en https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,55 +0,0 @@
appimage.config.database.expiration=Database expiration
appimage.config.database.expiration.tip=It defines the period (in minutes) in which the database will be considered up to date during the initialization process. Use 0 if you always want to update it.
appimage.config.suggestions.expiration=Suggestions expiration
appimage.config.suggestions.expiration.tip=It defines the period (in hours) in which the suggestions stored in disc will be considered up to date. Use 0 if you always want to update them
appimage.custom_action.install_file=Installer fichier AppImage
appimage.custom_action.install_file.desc=Installs an AppImage file on the system
appimage.custom_action.install_file.details=Détails d'installation d'AppImage
appimage.custom_action.install_file.invalid_file=Vous devez définir un fichier AppImage valide
appimage.custom_action.install_file.invalid_name=Vous devez choisir un nom à l'application
appimage.custom_action.install_file.status=Installation du fichier AppImage
appimage.custom_action.manual_update=Mettre fichier à jour
appimage.custom_action.manual_update.desc=Replaces the installed AppImage file by another one
appimage.custom_action.manual_update.details=Détails de mise à jour
appimage.custom_action.manual_update.status=Mise à jour
appimage.custom_action.self_install=Install Bearhub
appimage.custom_action.self_install.desc=Installs Bearhub on the system and adds its icons to the menu
appimage.custom_action.self_install.status=Installing Bearhub
appimage.custom_action.update_db=Update database
appimage.custom_action.update_db.desc=Downloads updated files from the AppImage applications database
appimage.custom_action.update_db.status=Updating database
appimage.downgrade.first_version={} est à sa première version publiée
appimage.downgrade.impossible.body={} a une seule version publiée.
appimage.downgrade.impossible.title=Impossible à downgrader
appimage.downgrade.install_version=Installer la version {} ({}) était impossible
appimage.downgrade.unknown_version.body=Impossible d'identifier la version actuelle de {} dans son historique de versions
appimage.download.error=It was not possible to download the file {}. The file server can be down.
appimage.download.no_url=No download URL associated with the app {app}
appimage.error.uninstall_current_version=Impossible de désinstaller la version actuelle de {}
appimage.history.0_version=version
appimage.history.1_published_at=date
appimage.history.2_url_download=URL du fichier
appimage.info.icon_path=icône
appimage.info.imported.false=Non
appimage.info.imported.true=Oui
appimage.info.install_dir=Répertoire d'installation
appimage.info.repository=Dépôt
appimage.info.symlink=Symlink
appimage.info.url_download=URL du fichier
appimage.install.appimagelauncher.error={appimgl} n'autorise pas {app} à être installé. Désinstallez {appimgl}, redemarrez, puis essayez d'installer {app} de nouveau.
appimage.install.desktop_entry=Generation d'un raccourci de menu
appimage.install.download.error=Échec du téléchargement du fichier {}. Le serveur peut être indisponible.
appimage.install.extract=Extractiion du contenu de {}
appimage.install.imported.rename_error=Impossible de déplacer {} vers {}
appimage.install.permission={} est maintenant exécutable
appimage.update_database.deleting_old=Removing old files
appimage.update_database.downloading=Downloading database files
appimage.update_database.uncompressing=Uncompressing files
appimage.upgrade.failed=It was not possible to upgrade the following applications: {apps}
appimage.task.db_update=Mise à jour des bases de données
appimage.task.db_update.checking=Checking for updates
appimage.task.symlink_check=Verification des symlinks
appimage.uninstall.error.remove_folder=Impossible de supprimer le répertoire d'installation {}
appimage.warning.missing_db_files={appimage} database files were not found. Some actions will not work properly.
gem.appimage.info=Applications publiées à https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,55 +0,0 @@
appimage.config.database.expiration=Database expiration
appimage.config.database.expiration.tip=It defines the period (in minutes) in which the database will be considered up to date during the initialization process. Use 0 if you always want to update it.
appimage.config.suggestions.expiration=Suggestions expiration
appimage.config.suggestions.expiration.tip=It defines the period (in hours) in which the suggestions stored in disc will be considered up to date. Use 0 if you always want to update them.
appimage.custom_action.install_file=Install AppImage file
appimage.custom_action.install_file.desc=Installs an AppImage file on the system
appimage.custom_action.install_file.details=AppImage installation details
appimage.custom_action.install_file.invalid_file=You must define a valid AppImage file
appimage.custom_action.install_file.invalid_name=You must define a name for the application
appimage.custom_action.install_file.status=Installing AppImage file
appimage.custom_action.manual_update=Upgrade file
appimage.custom_action.manual_update.desc=Replaces the installed AppImage file by another one
appimage.custom_action.manual_update.details=AppImage upgrade details
appimage.custom_action.manual_update.status=Upgrading
appimage.custom_action.self_install=Install Bearhub
appimage.custom_action.self_install.desc=Installs Bearhub on the system and adds its icons to the menu
appimage.custom_action.self_install.status=Installing Bearhub
appimage.custom_action.update_db=Update database
appimage.custom_action.update_db.desc=Downloads updated files from the AppImage applications database
appimage.custom_action.update_db.status=Updating database
appimage.downgrade.first_version={} è nella sua prima versione pubblicata
appimage.downgrade.impossible.body={} ha solo una versione pubblicata.
appimage.downgrade.impossible.title=Impossibile eseguire il downgrade
appimage.downgrade.install_version=Non è stato possibile installare la versione {} ({})
appimage.downgrade.unknown_version.body=Non è stato possibile identificare la {} versione corrente nella sua cronologia delle versioni
appimage.download.error=It was not possible to download the file {}. The file server can be down.
appimage.download.no_url=No download URL associated with the app {app}
appimage.error.uninstall_current_version=Non è stato possibile disinstallare la versione corrente di {}
appimage.history.0_version=versione
appimage.history.1_published_at=data
appimage.history.2_url_download=File URL
appimage.info.icon_path=icona
appimage.info.imported.false=No
appimage.info.imported.true=Yes
appimage.info.install_dir=Installation directory
appimage.info.repository=Deposito
appimage.info.symlink=Symlink
appimage.info.url_download=File URL
appimage.install.appimagelauncher.error={appimgl} non consente l'installazione di {app}. Disinstallare {appimgl}, riavviare il sistema e provare a installare nuovamente {app}.
appimage.install.desktop_entry=Genera un collegamento al menu
appimage.install.download.error=Non è stato possibile scaricare il file {}. Il file server può essere inattivo.
appimage.install.extract=Estrarre il contenuto da {}
appimage.install.imported.rename_error=It was not possible to move the file {} to {}
appimage.install.permission=Gdare il permesso di esecuzione a {}
appimage.update_database.deleting_old=Removing old files
appimage.update_database.downloading=Downloading database files
appimage.update_database.uncompressing=Uncompressing files
appimage.upgrade.failed=It was not possible to upgrade the following applications: {apps}
appimage.task.db_update=Aggiornamento dei database
appimage.task.db_update.checking=Checking for updates
appimage.task.symlink_check=Checking symlinks
appimage.uninstall.error.remove_folder=Impossibile rimuovere la directory di installazione dell'applicazione {}
appimage.warning.missing_db_files={appimage} database files were not found. Some actions will not work properly.
gem.appimage.info=Applicazioni pubblicate su https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,54 +0,0 @@
appimage.config.database.expiration=Expiração do banco de dados
appimage.config.database.expiration.tip=Define o período (em minutos) no qual o banco de dados será considerado atualizado durante o processo de inicialização. Use 0 se quiser que ele sempre seja atualizado.
appimage.config.suggestions.expiration=Expiração das sugestões
appimage.config.suggestions.expiration.tip=Define o período (em horas) no qual as sugestões armazenadas em disco serão consideradas atualizadas. Use 0 se quiser que elas sempre sejam atualizadas.
appimage.custom_action.install_file=Instalar arquivo AppImage
appimage.custom_action.install_file.desc=Instala um arquivo AppImage no sistema
appimage.custom_action.install_file.details=Detalhes de instalação de AppImage
appimage.custom_action.install_file.invalid_file=Você precisa definir um arquivo AppImage válido
appimage.custom_action.install_file.invalid_name=Você precisa definir um nome para o aplicativo
appimage.custom_action.install_file.status=Instalando arquivo AppImage
appimage.custom_action.manual_update=Atualizar arquivo
appimage.custom_action.manual_update.desc=Subsitui o arquivo AppImage instalado por outro
appimage.custom_action.manual_update.details=Detalhes de atualização de AppImage
appimage.custom_action.manual_update.status=Atualizando
appimage.custom_action.self_install=Instalar o Bearhub
appimage.custom_action.self_install.desc=Instala o Bearhub no sistema e adiciona os ícones no menu
appimage.custom_action.self_install.status=Instalando o Bearhub
appimage.custom_action.update_db=Atualizar banco de dados
appimage.custom_action.update_db.desc=Baixa arquivos atualizados da base de dados de aplicações AppImage
appimage.custom_action.update_db.status=Atualizando banco de dados
appimage.downgrade.first_version={} se encontra em sua primeira versão publicada
appimage.downgrade.impossible.body={} tem somente uma versão publicada.
appimage.downgrade.impossible.title=Impossível reverter a versão
appimage.downgrade.install_version=Não foi possivel instalar a versão {} ({})
appimage.downgrade.unknown_version.body=Não foi possível identificar a versão atual de {} no seu histórico de versões
appimage.download.error=Não foi possível baixar o arquivo {}. O servidor do arquivo pode estar fora do ar.
appimage.download.no_url=Nenhuma URL de download associada ao aplicativo {app}
appimage.error.uninstall_current_version=It was not possible to uninstall the current version of {}
appimage.history.0_version=versão
appimage.history.1_published_at=data
appimage.history.2_url_download=URL do arquivo
appimage.info.icon_path=ícone
appimage.info.imported.false=Não
appimage.info.imported.true=Sim
appimage.info.install_dir=Diretório de instalação
appimage.info.repository=Repositório
appimage.info.symlink=Link simbólico
appimage.info.url_download=URL do arquivo
appimage.install.appimagelauncher.error={appimgl} não está permitindo que o {app} seja instalado. Desinstale o {appimgl}, reinicie o sistema e tente instalar o {app} novamente.
appimage.install.desktop_entry=Criando um atalho no menu
appimage.install.extract=Extraindo o conteúdo de {}
appimage.install.imported.rename_error=Não foi possível mover o arquivo {} para {}
appimage.install.permission=Concedendo permissão de execução para {}
appimage.update_database.deleting_old=Removendo arquicos antigos
appimage.update_database.downloading=Baixando arquivos do banco de dados
appimage.update_database.uncompressing=Descomprimindo arquivos
appimage.upgrade.failed=Não foi possível atualizar as seguintes aplicações: {apps}
appimage.task.db_update=Atualizando base de dados
appimage.task.db_update.checking=Checando atualizações
appimage.task.symlink_check=Verificando links simbólicos
appimage.uninstall.error.remove_folder=Não foi possível remover o diretóri ode instalação do aplicativo {}
appimage.warning.missing_db_files=Arquivos do banco de dados {appimage} não foram encontrados. Algumas ações não funcionarão corretamente.
gem.appimage.info=Aplicativos publicados em https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,54 +0,0 @@
appimage.config.database.expiration=Срок действия базы данных
appimage.config.database.expiration.tip=IОпределяет период (в минутах), в течение которого база данных будет считаться актуальной в процессе инициализации. Используйте 0, если вы хотите обновлять ее всегда.
appimage.config.suggestions.expiration=Срок действия предложений
appimage.config.suggestions.expiration.tip=Определяет период (в часах), в течение которого предложения, хранящиеся на диске, будут считаться актуальными. Используйте 0, если вы хотите обновлять их всегда.
appimage.custom_action.install_file=Установить файл AppImage
appimage.custom_action.install_file.desc=Устанавливает файл AppImage в систему
appimage.custom_action.install_file.details=Детали установки
appimage.custom_action.install_file.invalid_file=Вы должны определить допустимый файл AppImage
appimage.custom_action.install_file.invalid_name=Вы должны определить имя для приложения
appimage.custom_action.install_file.status=Установка файла AppImage
appimage.custom_action.manual_update=Обновить файл
appimage.custom_action.manual_update.desc=Заменяет установленный файл AppImage на другой
appimage.custom_action.manual_update.details=Детали обновления
appimage.custom_action.manual_update.status=Обновляется...
appimage.custom_action.self_install=Установить Bearhub
appimage.custom_action.self_install.desc=Устанавливает программу Bearhub в систему и добавляет ее иконки в меню
appimage.custom_action.self_install.status=Установка Bearhub
appimage.custom_action.update_db=Обновление базы данных
appimage.custom_action.update_db.desc=Загрузка обновленных файлов из базы данных приложений AppImage
appimage.custom_action.update_db.status=Обновление базы данных
appimage.downgrade.first_version={} первая опубликованная версия
appimage.downgrade.impossible.body={} имеет только одну опубликованную версию
appimage.downgrade.impossible.title=Не удалось понизить версию
appimage.downgrade.install_version=Не удалось установить версию {} ({})
appimage.downgrade.unknown_version.body=Не удалось определить текущую версию {} в истории версий
appimage.download.error=Не удалось загрузить файл {}. Файловый сервер не отвечает
appimage.download.no_url=Нет URL-адреса загрузки, связанного с приложением {app}
appimage.error.uninstall_current_version=Не удалось удалить текущую версию {}
appimage.history.0_version=версия
appimage.history.1_published_at=дата
appimage.history.2_url_download=URL Файла
appimage.info.icon_path=Значок
appimage.info.imported.false=Нет
appimage.info.imported.true=Да
appimage.info.install_dir=Директория установки
appimage.info.repository=Pепозиторий
appimage.info.symlink=Символическая ссылка
appimage.info.url_download=URL Файла
appimage.install.appimagelauncher.error={appimgl} не позволяет установить {app} . Удалите {appimgl}, перезагрузите ваш компьютер и попробуйте снова установить {app}.
appimage.install.desktop_entry=Создать ярлык в меню
appimage.install.extract=Извлечь содержимое из {}
appimage.install.imported.rename_error=Не удалось переместить файл {} в {}
appimage.install.permission=Установить права на выполнение для {}
appimage.update_database.deleting_old=Удаление старых файлов
appimage.update_database.downloading=Загрузка файлов базы данных
appimage.update_database.uncompressing=Распаковка файлов
appimage.upgrade.failed=Не удалось обновить следующие приложения: {apps}
appimage.task.db_update=Обновление базы данных
appimage.task.db_update.checking=Проверка обновлений
appimage.task.symlink_check=Проверка cимволических ссылок
appimage.uninstall.error.remove_folder=Не удалось удалить каталог приложения {}
appimage.warning.missing_db_files={appimage} файлы базы данных не найдены. Некоторые действия будут работать некорректно.
gem.appimage.info=Приложения, опубликованные на https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,54 +0,0 @@
appimage.config.database.expiration=Database expiration
appimage.config.database.expiration.tip=It defines the period (in minutes) in which the database will be considered up to date during the initialization process. Use 0 if you always want to update it.
appimage.config.suggestions.expiration=Suggestions expiration
appimage.config.suggestions.expiration.tip=It defines the period (in hours) in which the suggestions stored in disc will be considered up to date. Use 0 if you always want to update them.
appimage.custom_action.install_file=AppImage dosyasını yükle
appimage.custom_action.install_file.desc=Installs an AppImage file on the system
appimage.custom_action.install_file.details=Kurulum detayları
appimage.custom_action.install_file.invalid_file=Geçerli bir AppImage dosyası tanımlamanız gerekir
appimage.custom_action.install_file.invalid_name=Uygulama için bir ad tanımlamanız gerekir
appimage.custom_action.install_file.status=AppImage dosyası yükleniyor
appimage.custom_action.manual_update=Yükseltme dosyası
appimage.custom_action.manual_update.desc=Replaces the installed AppImage file by another one
appimage.custom_action.manual_update.details=Yükseltme ayrıntıları
appimage.custom_action.manual_update.status=Yükseltiliyor
appimage.custom_action.self_install=Install Bearhub
appimage.custom_action.self_install.desc=Installs Bearhub on the system and adds its icons to the menu
appimage.custom_action.self_install.status=Installing Bearhub
appimage.custom_action.update_db=Update database
appimage.custom_action.update_db.desc=Downloads updated files from the AppImage applications database
appimage.custom_action.update_db.status=Updating database
appimage.downgrade.first_version={} ilk yayınlanmış versiyonunda
appimage.downgrade.impossible.body={} yalnızca bir yayınlanmış sürümüne sahip.
appimage.downgrade.impossible.title=Sürüm düşürmek imkansız
appimage.downgrade.install_version={} ({}) sürümünü kurmak mümkün değildi
appimage.downgrade.unknown_version.body=Sürüm geçmişinde {} mevcut sürümü tanımlamak mümkün değildi
appimage.download.error={} dosyası indirilemedi. Dosya sunucusu kapalı olabilir.
appimage.download.no_url=No download URL associated with the app {app}
appimage.error.uninstall_current_version={} mevcut sürümünü kaldırmak mümkün değildi
appimage.history.0_version=sürüm
appimage.history.1_published_at=tarih
appimage.history.2_url_download=Dosya Bağlantısı
appimage.info.icon_path=simge
appimage.info.imported.false=Hayır
appimage.info.imported.true=Evet
appimage.info.install_dir=Kurulum dizini
appimage.info.repository=Depo
appimage.info.symlink=Symlink
appimage.info.url_download=Dosya Bağlantısı
appimage.install.appimagelauncher.error={appimgl}, {app} uygulamasının yüklenmesine izin vermiyor. {appimgl} yazılımını kaldırın, sisteminizi yeniden başlatın ve {app} yazılımını tekrar yüklemeyi deneyin.
appimage.install.desktop_entry=Bir menü kısayolu oluşturuluyor
appimage.install.extract={} 'den içerik ayıklanıyor
appimage.install.imported.rename_error={} dosyasını {} klasörüne taşımak mümkün değildi
appimage.install.permission={} için yürütme izni veriliyor
appimage.update_database.deleting_old=Removing old files
appimage.update_database.downloading=Downloading database files
appimage.update_database.uncompressing=Uncompressing files
appimage.upgrade.failed=It was not possible to upgrade the following applications: {apps}
appimage.task.db_update=Veritabanları güncelleniyor
appimage.task.db_update.checking=Checking for updates
appimage.task.symlink_check=Checking symlinks
appimage.uninstall.error.remove_folder={} uygulama kurulum dizini kaldırılamadı
appimage.warning.missing_db_files={appimage} database files were not found. Some actions will not work properly.
gem.appimage.info=https://appimage.github.io/ adresinde yayınlanan uygulamalar
gem.appimage.label=AppImage

View File

@@ -1,54 +0,0 @@
appimage.config.database.expiration=数据库过期时间
appimage.config.database.expiration.tip=定义初始化过程中数据库被视为最新的期限(以分钟为单位)。如果您希望始终更新,请使用 0。
appimage.config.suggestions.expiration=建议过期时间
appimage.config.suggestions.expiration.tip=定义存储在磁盘中的建议被视为最新的期限(以小时为单位)。如果您希望始终更新它们,请使用 0。
appimage.custom_action.install_file=安装 AppImage 文件
appimage.custom_action.install_file.desc=在系统上安装 AppImage 文件
appimage.custom_action.install_file.details=AppImage 安装详情
appimage.custom_action.install_file.invalid_file=必须定义有效的 AppImage 文件
appimage.custom_action.install_file.invalid_name=必须为应用程序定义名称
appimage.custom_action.install_file.status=正在安装 AppImage 文件
appimage.custom_action.manual_update=升级文件
appimage.custom_action.manual_update.desc=使用另一个文件替换已安装的 AppImage 文件
appimage.custom_action.manual_update.details=AppImage 升级详情
appimage.custom_action.manual_update.status=正在升级
appimage.custom_action.self_install=安装 Bearhub
appimage.custom_action.self_install.desc=在系统上安装 Bearhub 并将其图标添加到菜单
appimage.custom_action.self_install.status=正在安装 Bearhub
appimage.custom_action.update_db=更新数据库
appimage.custom_action.update_db.desc=从 AppImage 应用程序数据库下载更新的文件
appimage.custom_action.update_db.status=正在更新数据库
appimage.downgrade.first_version={} 正在使用其首个发布版本
appimage.downgrade.impossible.body={} 只有一个已发布的版本。
appimage.downgrade.impossible.title=无法降级
appimage.downgrade.install_version=无法安装版本 {} ({})
appimage.downgrade.unknown_version.body={} 当前版本在其发布历史中未找到
appimage.download.error=无法下载文件 {}. 文件服务器可能已关闭。
appimage.download.no_url=未关联与应用程序 {app} 相关的下载 URL
appimage.error.uninstall_current_version=无法卸载当前版本的 {}
appimage.history.0_version=版本
appimage.history.1_published_at=发布日期
appimage.history.2_url_download=文件 URL
appimage.info.icon_path=图标路径
appimage.info.imported.false=否
appimage.info.imported.true=是
appimage.info.install_dir=安装目录
appimage.info.repository=仓库
appimage.info.symlink=符号链接
appimage.info.url_download=文件 URL
appimage.install.appimagelauncher.error={appimgl} 不允许安装 {app}。卸载 {appimgl},重新启动系统,然后尝试重新安装 {app}。
appimage.install.desktop_entry=生成菜单快捷方式
appimage.install.extract=从 {} 中提取内容
appimage.install.imported.rename_error=无法将文件 {} 移动到 {}
appimage.install.permission=赋予执行权限给 {}
appimage.update_database.deleting_old=正在删除旧文件
appimage.update_database.downloading=正在下载数据库文件
appimage.update_database.uncompressing=正在解压文件
appimage.upgrade.failed=无法升级以下应用程序:{apps}
appimage.task.db_update=正在更新数据库
appimage.task.db_update.checking=正在检查更新
appimage.task.symlink_check=正在检查符号链接
appimage.uninstall.error.remove_folder=无法删除应用程序安装目录 {}
appimage.warning.missing_db_files={appimage} 数据库文件未找到。某些操作将无法正常工作。
gem.appimage.info=在 https://appimage.github.io/ 上发布的应用程序
gem.appimage.label=AppImage

View File

@@ -1,48 +0,0 @@
import os
import re
from typing import Optional
RE_DESKTOP_EXEC = re.compile(r'(\n?\s*\w*Exec\s*=(.+))')
RE_MANY_SPACES = re.compile(r'\s+')
def find_appimage_file(folder: str) -> Optional[str]:
for r, d, files in os.walk(folder):
for f in files:
if f.lower().endswith('.appimage'):
return f'{folder}/{f}'
def replace_desktop_entry_exec_command(desktop_entry: str, appname: str, file_path: str) -> str:
execs = RE_DESKTOP_EXEC.findall(desktop_entry)
if not execs:
return desktop_entry
final_entry = desktop_entry
treated_name = appname.strip().lower()
for exec_groups in execs:
full_match = exec_groups[0]
if full_match.strip().startswith("TryExec"): # TryExec cause issues in some DE to display the app icon
final_entry = final_entry.replace(full_match, "")
continue
cmd = RE_MANY_SPACES.sub(' ', exec_groups[1].strip())
if cmd:
words = cmd.split(' ')
changed = False
for idx in range(len(words)):
if words[idx].lower() == treated_name:
words[idx] = f'"{file_path}"'
changed = True
break
if not changed:
words = [f'"{file_path}"']
final_entry = final_entry.replace(full_match, full_match.replace(exec_groups[1], ' '.join(words)))
return final_entry

View File

@@ -1,484 +0,0 @@
import glob
import json
import logging
import os
import tarfile
import time
import traceback
from datetime import datetime, timedelta, timezone
from pathlib import Path
from threading import Thread
from typing import Optional, Generator
import requests
from bauh.api.abstract.handler import TaskManager, ProcessWatcher
from bauh.api.http import HttpClient
from bauh.commons.boot import CreateConfigFile
from bauh.commons.html import bold
from bauh.gems.appimage import get_icon_path, INSTALLATION_DIR, SYMLINKS_DIR, util, DATABASES_TS_FILE, \
APPIMAGE_CACHE_DIR, DATABASE_APPS_FILE, DATABASE_RELEASES_FILE, URL_COMPRESSED_DATABASES
from bauh.gems.appimage.model import AppImage
from bauh.view.util.translation import I18n
class DatabaseUpdater(Thread):
COMPRESS_FILE_PATH = f'{APPIMAGE_CACHE_DIR}/db.tar.gz'
def __init__(self, i18n: I18n, http_client: HttpClient, logger: logging.Logger, taskman: TaskManager,
watcher: Optional[ProcessWatcher] = None, appimage_config: Optional[dict] = None, create_config: Optional[CreateConfigFile] = None):
super(DatabaseUpdater, self).__init__(daemon=True)
self.http_client = http_client
self.logger = logger
self.i18n = i18n
self.taskman = taskman
self.watcher = watcher
self.task_id = 'appim_db'
self.config = appimage_config
self.create_config = create_config
self.taskman.register_task(self.task_id, self.i18n['appimage.task.db_update'], get_icon_path())
def should_update(self, appimage_config: dict) -> bool:
ti = time.time()
try:
db_exp = int(appimage_config['database']['expiration'])
except ValueError:
self.logger.error("Could not parse settings property 'database.expiration': {}".format(appimage_config['database']['expiration']))
return True
if db_exp <= 0:
self.logger.info("No expiration time configured for the AppImage database")
return True
files = {*glob.glob(f'{APPIMAGE_CACHE_DIR}/*')}
if not files:
self.logger.warning(f'No database files on {APPIMAGE_CACHE_DIR}')
return True
if DATABASES_TS_FILE not in files:
self.logger.warning("No database timestamp file found ({})".format(DATABASES_TS_FILE))
return True
if DATABASE_APPS_FILE not in files:
self.logger.warning("Database file '{}' not found".format(DATABASE_APPS_FILE))
return True
if DATABASE_RELEASES_FILE not in files:
self.logger.warning("Database file '{}' not found".format(DATABASE_RELEASES_FILE))
return True
with open(DATABASES_TS_FILE) as f:
dbs_ts_str = f.read()
try:
dbs_timestamp = datetime.fromtimestamp(float(dbs_ts_str), tz=timezone.utc)
except Exception:
self.logger.error('Could not parse the databases timestamp: {}'.format(dbs_ts_str))
traceback.print_exc()
return True
update = dbs_timestamp + timedelta(minutes=db_exp) <= datetime.now(timezone.utc)
self.logger.info('Finished. Took {0:.2f} seconds'.format(time.time() - ti))
return update
def _update_task_progress(self, progress: float, substatus: Optional[str] = None):
self.taskman.update_progress(self.task_id, progress, substatus)
if self.watcher:
self.watcher.change_substatus(substatus)
def download_databases(self) -> bool:
self._update_task_progress(10, self.i18n['appimage.update_database.downloading'])
self.logger.info('Retrieving AppImage databases')
database_timestamp = datetime.now(timezone.utc).timestamp()
try:
res = self.http_client.get(URL_COMPRESSED_DATABASES, session=False)
except Exception as e:
self.logger.error("An error ocurred while downloading the AppImage database: {}".format(e.__class__.__name__))
res = None
if not res:
self.logger.warning('Could not download the database file {}'.format(URL_COMPRESSED_DATABASES))
return False
Path(APPIMAGE_CACHE_DIR).mkdir(parents=True, exist_ok=True)
with open(self.COMPRESS_FILE_PATH, 'wb+') as f:
f.write(res.content)
self.logger.info("Database file saved at {}".format(self.COMPRESS_FILE_PATH))
self._update_task_progress(50, self.i18n['appimage.update_database.deleting_old'])
old_db_files = glob.glob(f'{APPIMAGE_CACHE_DIR}/*.db')
if old_db_files:
self.logger.info('Deleting old database files')
for f in old_db_files:
os.remove(f)
self.logger.info('Old database files deleted')
self._update_task_progress(75, self.i18n['appimage.update_database.uncompressing'])
self.logger.info('Uncompressing {}'.format(self.COMPRESS_FILE_PATH))
try:
tf = tarfile.open(self.COMPRESS_FILE_PATH)
tf.extractall(APPIMAGE_CACHE_DIR)
self.logger.info('Successfully uncompressed file {}'.format(self.COMPRESS_FILE_PATH))
except Exception:
self.logger.error('Could not extract file {}'.format(self.COMPRESS_FILE_PATH))
traceback.print_exc()
return False
finally:
self.logger.info('Deleting {}'.format(self.COMPRESS_FILE_PATH))
os.remove(self.COMPRESS_FILE_PATH)
self.logger.info('File {} deleted'.format(self.COMPRESS_FILE_PATH))
self._update_task_progress(95)
self.logger.info("Saving database timestamp {}".format(database_timestamp))
with open(DATABASES_TS_FILE, 'w+') as f:
f.write(str(database_timestamp))
self.logger.info("Database timestamp saved")
return True
def run(self):
ti = time.time()
if self.create_config:
self.taskman.update_progress(self.task_id, 0, self.i18n['task.waiting_task'].format(bold(self.create_config.task_name)))
self.create_config.join()
self.config = self.create_config.config
self.taskman.update_progress(self.task_id, 1, self.i18n['appimage.task.db_update.checking'])
if self.should_update(self.config):
self.download_databases()
self.taskman.update_progress(self.task_id, 100, None)
self.taskman.finish_task(self.task_id)
tf = time.time()
self.logger.info("Finished. Took {0:.2f} seconds".format(tf - ti))
class SymlinksVerifier(Thread):
def __init__(self, taskman: TaskManager, i18n: I18n, logger: logging.Logger):
super(SymlinksVerifier, self).__init__(daemon=True)
self.taskman = taskman
self.i18n = i18n
self.logger = logger
self.task_id = 'appim_symlink_check'
self.taskman.register_task(self.task_id, self.i18n['appimage.task.symlink_check'], get_icon_path())
@staticmethod
def create_symlink(app: AppImage, file_path: str, logger: logging.Logger, watcher: ProcessWatcher = None):
logger.info("Creating a symlink for '{}'".format(app.name))
possible_names = (app.get_clean_name(), '{}-appimage'.format(app.get_clean_name()), app.name.lower(), '{}-appimage'.format(app.name.lower()))
if os.path.exists(SYMLINKS_DIR) and not os.path.isdir(SYMLINKS_DIR):
logger.warning("'{}' is not a directory. It will not be possible to create a symlink for '{}'".format(SYMLINKS_DIR, app.name))
return
available_system_dirs = (SYMLINKS_DIR, *(l for l in ('/usr/bin', '/usr/local/bin') if os.path.isdir(l)))
# checking if the link already exists:
available_name = None
for name in possible_names:
available_name = name
for sysdir in available_system_dirs:
if os.path.exists('{}/{}'.format(sysdir, name)):
available_name = None
break
if available_name:
break
if not available_name:
msg = "It was not possible to create a symlink for '{}' because the names {} are already available on the system".format(app.name,
possible_names)
logger.warning(msg)
if watcher:
watcher.print('[warning] {}'.format(msg))
else:
try:
Path(SYMLINKS_DIR).mkdir(parents=True, exist_ok=True)
except Exception:
logger.error("Could not create symlink directory '{}'".format(SYMLINKS_DIR))
return
symlink_path = '{}/{}'.format(SYMLINKS_DIR, available_name)
try:
os.symlink(src=file_path, dst=symlink_path)
app.symlink = symlink_path
msg = "symlink successfully created at {}".format(symlink_path)
logger.info(msg)
if watcher:
watcher.print(msg)
except Exception:
msg = "Could not create the symlink '{}'".format(symlink_path)
logger.error(msg)
if watcher:
watcher.print('[error] {}'.format(msg))
def run(self):
if os.path.exists(INSTALLATION_DIR):
installed_files = glob.glob(f'{INSTALLATION_DIR}/*/*.json')
if installed_files:
self.logger.info("Checking installed AppImage files with no symlinks created")
progress_per_file = (1/len(installed_files)) * 100
total_progress = 0
for json_file in installed_files:
with open(json_file) as f:
try:
data = json.loads(f.read())
except Exception:
self.logger.warning("Could not parse data from '{}'".format(json_file))
data = None
if data and not data.get('symlink'):
if not data.get('install_dir'):
data['install_dir'] = '/'.join(json_file.split('/')[0:-1])
app = AppImage(**data, i18n=self.i18n)
file_path = util.find_appimage_file(app.install_dir)
if file_path:
self.create_symlink(app, file_path, self.logger)
data['symlink'] = app.symlink
# caching
try:
with open(json_file, 'w+') as f:
f.write(json.dumps(data))
except Exception:
self.logger.warning("Could not update cached data on '{}'".format(json_file))
traceback.print_exc()
else:
self.logger.warning("No AppImage file found on installation dir '{}'".format(file_path))
total_progress += progress_per_file
self.taskman.update_progress(self.task_id, total_progress, '')
self.taskman.update_progress(self.task_id, 100, '')
self.taskman.finish_task(self.task_id)
return
self.logger.info("No AppImage applications found. Aborting")
self.taskman.update_progress(self.task_id, 100, '')
self.taskman.finish_task(self.task_id)
class AppImageSuggestionsDownloader(Thread):
def __init__(self, logger: logging.Logger, http_client: HttpClient, i18n: I18n, file_url: Optional[str],
create_config: Optional[CreateConfigFile] = None, appimage_config: Optional[dict] = None,
taskman: Optional[TaskManager] = None):
super(AppImageSuggestionsDownloader, self).__init__(daemon=True)
self.create_config = create_config
self.logger = logger
self.i18n = i18n
self.http_client = http_client
self.taskman = taskman
self.config = appimage_config
self.task_id = 'appim.suggestions'
self._cached_file_path: Optional[str] = None
self._cached_ts_file_path: Optional[str] = None
if file_url:
self._file_url = file_url
else:
self._file_url = f'https://raw.githubusercontent.com/vinifmor/bauh-files/master/appimage/suggestions.txt'
@property
def cached_file_path(self) -> str:
if not self._cached_file_path:
self._cached_file_path = f'{APPIMAGE_CACHE_DIR}/suggestions.txt'
return self._cached_file_path
@property
def cached_ts_file_path(self) -> str:
if not self._cached_ts_file_path:
self._cached_ts_file_path = f'{APPIMAGE_CACHE_DIR}/suggestions.ts'
return self._cached_ts_file_path
def register_task(self):
self.taskman.register_task(id_=self.task_id,
label=self.i18n['task.download_suggestions'], icon_path=get_icon_path())
def is_custom_local_file_mapped(self) -> bool:
return self._file_url and self._file_url.startswith('/')
def should_download(self, appimage_config: dict) -> bool:
if not self._file_url:
self.logger.error("No AppImage suggestions file URL defined")
return False
if self.is_custom_local_file_mapped():
return False
try:
exp_hours = int(appimage_config['suggestions']['expiration'])
except Exception:
self.logger.error("An exception happened while trying to parse the AppImage 'suggestions.expiration'")
traceback.print_exc()
return True
if exp_hours <= 0:
self.logger.info("The AppImage suggestions cache is disabled")
return True
if not os.path.exists(self.cached_file_path):
self.logger.info(f"File {self.cached_file_path} not found. It must be downloaded")
return True
if not os.path.exists(self.cached_ts_file_path):
self.logger.info(f"File {self.cached_ts_file_path} not found. The suggestions file must be downloaded.")
return True
with open(self.cached_ts_file_path) as f:
timestamp_str = f.read()
try:
suggestions_timestamp = datetime.fromtimestamp(float(timestamp_str), tz=timezone.utc)
except Exception:
self.logger.error(f'Could not parse the cached AppImage suggestions timestamp: {timestamp_str}')
traceback.print_exc()
return True
update = suggestions_timestamp + timedelta(hours=exp_hours) <= datetime.now(timezone.utc)
return update
def read(self) -> Generator[str, None, None]:
if not self._file_url:
self.logger.error("No AppImage suggestions file URL defined")
yield from ()
self.logger.info("Checking if AppImage suggestions should be downloaded")
if self.should_download(self.config):
suggestions_timestamp = datetime.now(timezone.utc).timestamp()
suggestions_str = self.download()
Thread(target=self.cache_suggestions, args=(suggestions_str, suggestions_timestamp), daemon=True).start()
else:
if self.is_custom_local_file_mapped():
file_path, log_ref = self._file_url, 'local'
else:
file_path, log_ref = self.cached_file_path, 'cached'
self.logger.info(f"Reading {log_ref} AppImage suggestions from {file_path}")
with open(file_path) as f:
suggestions_str = f.read()
yield from self.map_suggestions(suggestions_str) if suggestions_str else ()
def cache_suggestions(self, text: str, timestamp: float):
self.logger.info(f"Caching AppImage suggestions to {self.cached_file_path}")
cache_dir = os.path.dirname(self.cached_file_path)
try:
Path(cache_dir).mkdir(parents=True, exist_ok=True)
cache_dir_ok = True
except OSError:
self.logger.error(f"Could not create the caching directory {cache_dir}")
traceback.print_exc()
cache_dir_ok = False
if cache_dir_ok:
try:
with open(self.cached_file_path, 'w+') as f:
f.write(text)
except Exception:
self.logger.error(f"An exception happened while writing AppImage suggestions to {self.cached_file_path}")
traceback.print_exc()
try:
with open(self.cached_ts_file_path, 'w+') as f:
f.write(str(timestamp))
except Exception:
self.logger.error(f"An exception happened while writing the cached AppImage suggestions timestamp "
f"to {self.cached_ts_file_path}")
traceback.print_exc()
def download(self) -> Optional[str]:
if not self._file_url:
self.logger.error("No AppImage suggestions file URL defined")
return
if self.is_custom_local_file_mapped():
self.logger.warning("Local AppImage suggestions file mapped. Nothing will be downloaded")
return
self.logger.info(f"Downloading AppImage suggestions from {self._file_url}")
try:
res = self.http_client.get(self._file_url)
except requests.exceptions.ConnectionError:
self.logger.warning(f"Could not download suggestion from {self._file_url}")
return
if not res:
self.logger.warning(f"Could not download suggestion from {self._file_url}")
return
if not res.text:
self.logger.warning(f"No AppImage suggestion found in {self._file_url}")
return
return res.text
def map_suggestions(self, text: str) -> Generator[str, None, None]:
return (line for line in text.split('\n') if line)
def run(self):
ti = time.time()
if not self.is_custom_local_file_mapped():
if self.create_config:
wait_msg = self.i18n['task.waiting_task'].format(bold(self.create_config.task_name))
self.taskman.update_progress(self.task_id, 0, wait_msg)
self.create_config.join()
self.config = self.create_config.config
ti = time.time()
self.taskman.update_progress(self.task_id, 1, None)
self.logger.info("Checking if AppImage suggestions should be downloaded")
should_download = self.should_download(self.config)
self.taskman.update_progress(self.task_id, 30, None)
try:
if should_download:
suggestions_timestamp = datetime.now(timezone.utc).timestamp()
suggestions_str = self.download()
self.taskman.update_progress(self.task_id, 70, None)
if suggestions_str:
self.cache_suggestions(suggestions_str, suggestions_timestamp)
else:
self.logger.info("Cached AppImage suggestions are up-to-date")
except Exception:
self.logger.error("An unexpected exception happened while downloading AppImage suggestions")
traceback.print_exc()
self.taskman.update_progress(self.task_id, 100, None)
self.taskman.finish_task(self.task_id)
tf = time.time()
self.logger.info(f"Took {tf - ti:.9f} seconds to download suggestions")