This commit is contained in:
Vinícius Moreira
2020-04-13 11:49:28 -03:00
parent 83aab1ff55
commit 01a60ea686
165 changed files with 12778 additions and 6171 deletions

View File

@@ -2,9 +2,14 @@ import os
from pathlib import Path
from bauh.api.constants import CONFIG_PATH
from bauh.commons import resource
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
LOCAL_PATH = '{}/.local/share/bauh/appimage'.format(Path.home())
LOCAL_PATH = '{}/.local/share/bauh/appimage'.format(str(Path.home()))
INSTALLATION_PATH = LOCAL_PATH + '/installed/'
SUGGESTIONS_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/appimage/suggestions.txt'
CONFIG_FILE = '{}/appimage.yml'.format(CONFIG_PATH)
def get_icon_path() -> str:
return resource.get_path('img/appimage.svg', ROOT_DIR)

View File

@@ -9,23 +9,24 @@ import traceback
from datetime import datetime
from math import floor
from pathlib import Path
from threading import Lock, Thread
from threading import Lock
from typing import Set, Type, List, Tuple
from colorama import Fore
from bauh.api.abstract.context import ApplicationContext
from bauh.api.abstract.controller import SoftwareManager, SearchResult
from bauh.api.abstract.controller import SoftwareManager, SearchResult, UpgradeRequirements, UpgradeRequirement
from bauh.api.abstract.disk import DiskCacheLoader
from bauh.api.abstract.handler import ProcessWatcher
from bauh.api.abstract.handler import ProcessWatcher, TaskManager
from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpdate, PackageSuggestion, \
SuggestionPriority
SuggestionPriority, CustomSoftwareAction
from bauh.api.abstract.view import MessageType, ViewComponent, FormComponent, InputOption, SingleSelectComponent, \
SelectViewType, TextInputComponent, PanelComponent
SelectViewType, TextInputComponent, PanelComponent, FileChooserComponent
from bauh.commons import resource
from bauh.commons.config import save_config
from bauh.commons.html import bold
from bauh.commons.system import SystemProcess, new_subprocess, ProcessHandler, run_cmd, SimpleProcess
from bauh.gems.appimage import query, INSTALLATION_PATH, LOCAL_PATH, SUGGESTIONS_FILE, CONFIG_FILE
from bauh.gems.appimage import query, INSTALLATION_PATH, LOCAL_PATH, SUGGESTIONS_FILE, CONFIG_FILE, ROOT_DIR
from bauh.gems.appimage.config import read_config
from bauh.gems.appimage.model import AppImage
from bauh.gems.appimage.worker import DatabaseUpdater
@@ -52,6 +53,86 @@ class AppImageManager(SoftwareManager):
self.logger = context.logger
self.file_downloader = context.file_downloader
self.db_locks = {DB_APPS_PATH: Lock(), DB_RELEASES_PATH: Lock()}
self.custom_actions = [CustomSoftwareAction(i18_label_key='appimage.custom_action.install_file',
i18n_status_key='appimage.custom_action.install_file.status',
manager=self,
manager_method='install_file',
icon_path=resource.get_path('img/appimage.svg', ROOT_DIR),
requires_root=False)]
def install_file(self, root_password: str, watcher: ProcessWatcher) -> bool:
file_chooser = FileChooserComponent(label=self.i18n['file'].capitalize(), allowed_extensions={'AppImage'})
input_name = TextInputComponent(label=self.i18n['name'].capitalize())
input_version = TextInputComponent(label=self.i18n['version'].capitalize())
input_description = TextInputComponent(label=self.i18n['description'].capitalize())
cat_ops = [InputOption(label=self.i18n['category.none'].capitalize(), value=0)]
cat_ops.extend([InputOption(label=self.i18n[c.lower()].capitalize(), value=c) for c in self.context.default_categories])
inp_cat = SingleSelectComponent(label=self.i18n['category'], type_=SelectViewType.COMBO, options=cat_ops,
default_option=cat_ops[0])
form = FormComponent(label='', components=[file_chooser, input_name, input_version, input_description, inp_cat], spaces=False)
while True:
if watcher.request_confirmation(title=self.i18n['appimage.custom_action.install_file.details'], body=None,
components=[form],
confirmation_label=self.i18n['proceed'].capitalize(),
deny_label=self.i18n['cancel'].capitalize()):
if not file_chooser.file_path or not os.path.isfile(file_chooser.file_path):
watcher.request_confirmation(title=self.i18n['error'].capitalize(),
body=self.i18n['appimage.custom_action.install_file.invalid_file'],
deny_button=False)
elif not input_name.get_value() or not input_name.get_value().strip():
watcher.request_confirmation(title=self.i18n['error'].capitalize(),
body=self.i18n['appimage.custom_action.install_file.invalid_name'],
deny_button=False)
else:
break
else:
return False
appim = AppImage(i18n=self.i18n, imported=True)
appim.name = input_name.get_value().strip()
appim.local_file_path = file_chooser.file_path
appim.version = input_version.get_value()
appim.latest_version = input_version.get_value()
appim.description = input_description.get_value()
appim.categories = ['Imported']
if inp_cat.get_selected() != cat_ops[0].value:
appim.categories.append(inp_cat.get_selected())
installed = self.install(root_password=root_password, pkg=appim, watcher=watcher)
if installed:
appim.installed = True
self.cache_to_disk(appim, None, False)
return installed
def update_file(self, pkg: AppImage, root_password: str, watcher: ProcessWatcher):
file_chooser = FileChooserComponent(label=self.i18n['file'].capitalize(), allowed_extensions={'AppImage'})
input_version = TextInputComponent(label=self.i18n['version'].capitalize())
while True:
if watcher.request_confirmation(title=self.i18n['appimage.custom_action.manual_update.details'], body=None,
components=[FormComponent(label='', components=[file_chooser, input_version], spaces=False)],
confirmation_label=self.i18n['proceed'].capitalize(),
deny_label=self.i18n['cancel'].capitalize()):
if not file_chooser.file_path or not os.path.isfile(file_chooser.file_path):
watcher.request_confirmation(title=self.i18n['error'].capitalize(),
body=self.i18n['appimage.custom_action.install_file.invalid_file'],
deny_button=False)
else:
break
else:
return False
pkg.local_file_path = file_chooser.file_path
pkg.version = input_version.get_value()
reqs = UpgradeRequirements(to_install=None, to_remove=None, to_upgrade=[UpgradeRequirement(pkg=pkg)], cannot_upgrade=None)
return self.upgrade(reqs, root_password=root_password, watcher=watcher)
def _get_db_connection(self, db_path: str) -> sqlite3.Connection:
if os.path.exists(db_path):
@@ -82,7 +163,7 @@ class AppImageManager(SoftwareManager):
found_map = {}
idx = 0
for l in cursor.fetchall():
app = AppImage(*l)
app = AppImage(*l, i18n=self.i18n)
res.new.append(app)
found_map[self._gen_app_key(app)] = {'app': app, 'idx': idx}
idx += 1
@@ -118,7 +199,7 @@ class AppImageManager(SoftwareManager):
for path in installed.split('\n'):
if path:
with open(path) as f:
app = AppImage(installed=True, **json.loads(f.read()))
app = AppImage(installed=True, i18n=self.i18n, **json.loads(f.read()))
app.icon_url = app.icon_path
res.installed.append(app)
@@ -189,18 +270,25 @@ class AppImageManager(SoftwareManager):
return False
def update(self, pkg: AppImage, root_password: str, watcher: ProcessWatcher) -> bool:
if not self.uninstall(pkg, root_password, watcher):
watcher.show_message(title=self.i18n['error'],
body=self.i18n['appimage.error.uninstall_current_version'],
type_=MessageType.ERROR)
return False
def upgrade(self, requirements: UpgradeRequirements, root_password: str, watcher: ProcessWatcher) -> bool:
for req in requirements.to_upgrade:
watcher.change_status("{} {} ({})...".format(self.i18n['manage_window.status.upgrading'], req.pkg.name, req.pkg.version))
if self.install(pkg, root_password, watcher):
self.cache_to_disk(pkg, None, False)
return True
if not self.uninstall(req.pkg, root_password, watcher):
watcher.show_message(title=self.i18n['error'],
body=self.i18n['appimage.error.uninstall_current_version'],
type_=MessageType.ERROR)
watcher.change_substatus('')
return False
return False
if not self.install(req.pkg, root_password, watcher):
watcher.change_substatus('')
return False
self.cache_to_disk(req.pkg, None, False)
watcher.change_substatus('')
return True
def uninstall(self, pkg: AppImage, root_password: str, watcher: ProcessWatcher) -> bool:
if os.path.exists(pkg.get_disk_cache_path()):
@@ -290,17 +378,47 @@ class AppImageManager(SoftwareManager):
def install(self, pkg: AppImage, root_password: str, watcher: ProcessWatcher) -> bool:
handler = ProcessHandler(watcher)
out_dir = INSTALLATION_PATH + pkg.name.lower()
counter = 0
while True:
if os.path.exists(out_dir):
self.logger.info("Installation dir '{}' already exists. Generating a different one".format(out_dir))
out_dir += '-{}'.format(counter)
counter += 1
else:
break
Path(out_dir).mkdir(parents=True, exist_ok=True)
pkg.install_dir = out_dir
appimage_url = pkg.url_download_latest_version if pkg.update else pkg.url_download
file_name = appimage_url.split('/')[-1]
pkg.version = pkg.latest_version
pkg.url_download = appimage_url
if pkg.imported:
file_path = out_dir + '/' + file_name
downloaded = self.file_downloader.download(file_url=pkg.url_download, watcher=watcher,
output_path=file_path, cwd=str(Path.home()))
downloaded, file_name = True, pkg.local_file_path.split('/')[-1]
file_path = out_dir + '/' + file_name
try:
moved, output = handler.handle_simple(SimpleProcess(['mv', pkg.local_file_path, file_path]))
except:
self.logger.error("Could not rename file '' as '{}'".format(pkg.local_file_path, file_path))
moved = False
if not moved:
watcher.show_message(title=self.i18n['error'].capitalize(),
body=self.i18n['appimage.install.imported.rename_error'].format(bold(pkg.local_file_path.split('/')[-1]), bold(output)),
type_=MessageType.ERROR)
return False
else:
appimage_url = pkg.url_download_latest_version if pkg.update else pkg.url_download
file_name = appimage_url.split('/')[-1]
pkg.version = pkg.latest_version
pkg.url_download = appimage_url
file_path = out_dir + '/' + file_name
downloaded = self.file_downloader.download(file_url=pkg.url_download, watcher=watcher,
output_path=file_path, cwd=str(Path.home()))
if downloaded:
watcher.change_substatus(self.i18n['appimage.install.permission'].format(bold(file_name)))
@@ -392,20 +510,19 @@ class AppImageManager(SoftwareManager):
def requires_root(self, action: str, pkg: AppImage):
return False
def _start_updater(self):
def prepare(self, task_manager: TaskManager, root_password: str, internet_available: bool):
local_config = read_config(update_file=True)
interval = local_config['db_updater']['interval'] or 20 * 60
updater = DatabaseUpdater(http_client=self.context.http_client, logger=self.context.logger,
updater = DatabaseUpdater(task_man=task_manager,
i18n=self.context.i18n,
http_client=self.context.http_client, logger=self.context.logger,
db_locks=self.db_locks, interval=interval)
if local_config['db_updater']['enabled']:
updater.start()
else:
elif internet_available:
updater.download_databases() # only once
def prepare(self):
Thread(target=self._start_updater, daemon=True).start()
def list_updates(self, internet_available: bool) -> List[PackageUpdate]:
res = self.read_installed(disk_loader=None, internet_available=internet_available)
@@ -413,7 +530,7 @@ class AppImageManager(SoftwareManager):
if res.installed:
for app in res.installed:
if app.update:
updates.append(PackageUpdate(pkg_id=app.name, pkg_type='appimage', version=app.latest_version))
updates.append(PackageUpdate(pkg_id=app.name, pkg_type='AppImage', version=app.latest_version, name=app.name))
return updates
@@ -458,7 +575,7 @@ class AppImageManager(SoftwareManager):
cursor.execute(query.FIND_APPS_BY_NAME_FULL.format(','.join(["'{}'".format(s) for s in sugs_map.keys()])))
for t in cursor.fetchall():
app = AppImage(*t)
app = AppImage(*t, i18n=self.i18n)
res.append(PackageSuggestion(app, sugs_map[app.name.lower()]))
self.logger.info("Mapped {} suggestions".format(len(res)))
except:
@@ -538,3 +655,22 @@ class AppImageManager(SoftwareManager):
return True, None
except:
return False, [traceback.format_exc()]
def get_custom_actions(self) -> List[CustomSoftwareAction]:
return self.custom_actions
def get_upgrade_requirements(self, pkgs: List[AppImage], root_password: str, watcher: ProcessWatcher) -> UpgradeRequirements:
to_update = []
for pkg in pkgs:
requirement = UpgradeRequirement(pkg)
installed_size = self.http_client.get_content_length_in_bytes(pkg.url_download)
upgrade_size = self.http_client.get_content_length_in_bytes(pkg.url_download_latest_version)
requirement.required_size = upgrade_size
if upgrade_size and installed_size:
requirement.extra_size = upgrade_size - installed_size
to_update.append(requirement)
return UpgradeRequirements([], [], to_update, [])

View File

@@ -1,9 +1,18 @@
from bauh.api.abstract.model import SoftwarePackage
from typing import List
from bauh.api.abstract.model import SoftwarePackage, CustomSoftwareAction
from bauh.commons import resource
from bauh.gems.appimage import ROOT_DIR, INSTALLATION_PATH
from bauh.view.util.translation import I18n
CACHED_ATTRS = {'name', 'description', 'version', 'url_download', 'author', 'license', 'source',
'icon_path', 'github', 'categories'}
'icon_path', 'github', 'categories', 'imported', 'install_dir'}
CUSTOM_ACTIONS = [CustomSoftwareAction(i18_label_key='appimage.custom_action.manual_update',
i18n_status_key='appimage.custom_action.manual_update.status',
manager_method='update_file',
requires_root=False,
icon_path=resource.get_path('img/refresh.svg', ROOT_DIR))]
class AppImage(SoftwarePackage):
@@ -11,7 +20,8 @@ class AppImage(SoftwarePackage):
def __init__(self, name: str = None, description: str = None, github: 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, **kwargs):
url_download_latest_version: str = None, local_file_path: str = None, imported: bool = False,
i18n: I18n = None, install_dir: 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)
@@ -23,6 +33,10 @@ class AppImage(SoftwarePackage):
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
def __repr__(self):
return "{} (name={}, github={})".format(self.__class__.__name__, self.name, self.github)
@@ -31,13 +45,13 @@ class AppImage(SoftwarePackage):
return not self.installed and self.url_download
def has_history(self):
return self.installed
return self.installed and not self.imported
def has_info(self):
return True
def can_be_downgraded(self):
return self.installed
return self.installed and not self.imported
def get_type(self):
return 'AppImage'
@@ -75,7 +89,9 @@ class AppImage(SoftwarePackage):
return self.author
def get_disk_cache_path(self) -> str:
if self.name:
if self.install_dir:
return self.install_dir
elif self.name:
return INSTALLATION_PATH + self.name.lower()
def get_disk_icon_path(self):
@@ -83,3 +99,16 @@ class AppImage(SoftwarePackage):
def has_screenshots(self):
return not self.installed and self.url_screenshot
def get_display_name(self) -> str:
if self.name and self.imported:
return '{} ( {} )'.format(self.name, self.i18n['imported'])
return self.name
def get_custom_supported_actions(self) -> List[CustomSoftwareAction]:
if self.imported:
return CUSTOM_ACTIONS
def supports_backup(self) -> bool:
return False

View File

@@ -0,0 +1,146 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<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"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
width="48"
height="48"
viewBox="0 0 47.999999 47.999999"
xml:space="preserve"
sodipodi:docname="refresh_2.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)"><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></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs43"><linearGradient
inkscape:collect="always"
id="linearGradient540"><stop
style="stop-color:#0088aa;stop-opacity:1;"
offset="0"
id="stop536" /><stop
style="stop-color:#0088aa;stop-opacity:0;"
offset="1"
id="stop538" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient540"
id="linearGradient542"
x1="-130.74721"
y1="-214.80638"
x2="-556.49438"
y2="110.01643"
gradientUnits="userSpaceOnUse" /></defs><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="703"
id="namedview41"
showgrid="false"
showborder="false"
inkscape:zoom="1.9374833"
inkscape:cx="165.58246"
inkscape:cy="-10.288149"
inkscape:window-x="0"
inkscape:window-y="260"
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" />
<g
id="g8"
transform="matrix(0.10547014,0,0,0.0985161,-1.6940777,0)"
style="fill:url(#linearGradient542);fill-opacity:1">
<g
id="g6"
style="fill:url(#linearGradient542);fill-opacity:1">
<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:url(#linearGradient542);fill-opacity:1" />
<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:url(#linearGradient542);fill-opacity:1" />
</g>
</g>
<g
id="g10"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g12"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g14"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g16"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g18"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g20"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g22"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g24"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g26"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g28"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g30"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g32"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g34"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g36"
transform="translate(-16.062155,-439.23)">
</g>
<g
id="g38"
transform="translate(-16.062155,-439.23)">
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -1,23 +1,36 @@
gem.appimage.label=AppImage
gem.appimage.info=Aplicacions publicades a https://appimage.github.io/
appimage.install.permission=Sestà concedint el permís dexecució a {}
appimage.install.extract=Sestà extraient el contingut de {}
appimage.install.desktop_entry=Sestà creant una drecera del menú
appimage.uninstall.error.remove_folder=No sha pogut suprimir el directori dinstal·lació de laplicació {}
appimage.info.url_download=URL del fitxer
appimage.info.icon_path=icona
appimage.history.0_version=versió
appimage.history.1_published_at=data
appimage.history.2_url_download=URL del fitxer
appimage.downgrade.impossible.title=No sha pogut revertir la versió
appimage.downgrade.impossible.body={} té només una versió publicada.
appimage.downgrade.unknown_version.body=No sha pogut identificar la versió actual de {} a lhistorial de versions
appimage.downgrade.first_version={} és a la seva primera versió publicada
appimage.downgrade.uninstall_current_version=No sha pogut desinstal·lar la versió actual de {}
appimage.downgrade.install_version=No sha pogut instal·lar la versió {} ({})
appimage.install.download.error=No sha pogut baixar el fitxer {}. El servidor del fitxer pot estar inactiu.
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.config.db_updates=Database update
appimage.config.db_updates.activated=activated
appimage.config.db_updates.activated.tip=It will be possible to check for updates related to the installed applications
appimage.config.db_updates.interval.tip=Update interval in SECONDS
appimage.config.db_updates.interval.tip=Update interval in SECONDS
appimage.custom_action.install_file=Install AppImage file
appimage.custom_action.install_file.details=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.details=Upgrade details
appimage.custom_action.manual_update.status=Upgrading
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.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.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.download.error=No sha pogut baixar el fitxer {}. El servidor del fitxer pot estar inactiu.
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.task.db_update=Actualització de bases de dades
appimage.uninstall.error.remove_folder=No sha pogut suprimir el directori dinstal·lació de laplicació {}
gem.appimage.info=Aplicacions publicades a https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,23 +1,36 @@
gem.appimage.label=AppImage
gem.appimage.info=Anwendungen veröffentlicht auf https://appimage.github.io/
appimage.install.permission=Ausführberechtigungen für {}
appimage.install.extract=Entpacke Inhalt von {}
appimage.install.desktop_entry=Menü-Shortcut erstellen
appimage.uninstall.error.remove_folder=Anwendungordner {} konnte nicht entfernt werden
appimage.info.url_download=Datei URL
appimage.info.icon_path=icon
appimage.history.0_version=Version
appimage.history.1_published_at=Datum
appimage.history.2_url_download=Datei URL
appimage.downgrade.impossible.title=Downgrade nicht möglich
appimage.downgrade.impossible.body={} hat nur eine veröffentliche Version
appimage.downgrade.unknown_version.body=Die Identifikation der aktuellen Version von {} im Versionsverlauf war nicht möglich
appimage.downgrade.first_version={} ist in der ersten veröffentlichten Version
appimage.error.uninstall_current_version=Deinstallation der aktuellen Version von {} war nicht möglich
appimage.downgrade.install_version=Die Installation der Version {} ({}) war nicht möglich
appimage.install.download.error=Das Herunterladen der Datei {} ist fehlgeschlagen. Eventuell ist der Server nicht verfügbar
appimage.install.appimagelauncher.error={appimgl} verhindert die installation von {app}. Deinstalliere {appimgl}, starte deinen Computer neu und versuche die installation von {app} erneut.
appimage.config.db_updates=Database update
appimage.config.db_updates.activated=activated
appimage.config.db_updates.activated.tip=It will be possible to check for updates related to the installed applications
appimage.config.db_updates.interval.tip=Update interval in SECONDS
appimage.config.db_updates.interval.tip=Update interval in SECONDS
appimage.custom_action.install_file=Install AppImage file
appimage.custom_action.install_file.details=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.details=Upgrade details
appimage.custom_action.manual_update.status=Upgrading
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=Die Identifikation der aktuellen Version von {} im Versionsverlauf war nicht möglich
appimage.error.uninstall_current_version=Deinstallation der aktuellen Version von {} war nicht möglich
appimage.history.0_version=Version
appimage.history.1_published_at=Datum
appimage.history.2_url_download=Datei URL
appimage.info.icon_path=icon
appimage.info.imported.false=Nien
appimage.info.imported.true=Ya
appimage.info.install_dir=Installation directory
appimage.info.url_download=Datei URL
appimage.install.appimagelauncher.error={appimgl} verhindert die installation von {app}. Deinstalliere {appimgl}, starte deinen Computer neu und versuche die installation von {app} erneut.
appimage.install.desktop_entry=Menü-Shortcut erstellen
appimage.install.download.error=Das Herunterladen der Datei {} ist fehlgeschlagen. Eventuell ist der Server nicht verfügbar
appimage.install.extract=Entpacke Inhalt von {}
appimage.install.imported.rename_error=It was not possible to move the file {} to {}
appimage.install.permission=Ausführberechtigungen für {}
appimage.task.db_update=Updating databases
appimage.uninstall.error.remove_folder=Anwendungordner {} konnte nicht entfernt werden
gem.appimage.info=Anwendungen veröffentlicht auf https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,23 +1,36 @@
gem.appimage.label=AppImage
gem.appimage.info=Applications published at https://appimage.github.io/
appimage.install.permission=Giving execution permission to {}
appimage.install.extract=Extracting the content from {}
appimage.install.desktop_entry=Generating a menu shortcut
appimage.uninstall.error.remove_folder=Could not remove the application installation directory {}
appimage.info.url_download=File URL
appimage.info.icon_path=icon
appimage.history.0_version=version
appimage.history.1_published_at=date
appimage.history.2_url_download=File URL
appimage.downgrade.impossible.title=Impossible to downgrade
appimage.downgrade.impossible.body={} has only one published version.
appimage.downgrade.unknown_version.body=It was not possible to identify {} current version in its versions history
appimage.downgrade.first_version={} is in its first published version
appimage.error.uninstall_current_version=It was not possible to uninstall the current version of {}
appimage.downgrade.install_version=It was not possible to install the version {} ({})
appimage.install.download.error=It was not possible to download the file {}. The file server can be down.
appimage.install.appimagelauncher.error={appimgl} is not allowing {app} to be installed. Uninstall {appimgl}, reboot your system and try to install {app} again.
appimage.config.db_updates=Database update
appimage.config.db_updates.activated=activated
appimage.config.db_updates.activated.tip=It will be possible to check for updates related to the installed applications
appimage.config.db_updates.interval.tip=Update interval in SECONDS
appimage.config.db_updates.interval.tip=Update interval in SECONDS
appimage.custom_action.install_file=Install AppImage file
appimage.custom_action.install_file.details=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.details=Upgrade details
appimage.custom_action.manual_update.status=Upgrading
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=It was not possible to identify {} current version in its versions history
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.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.download.error=It was not possible to download the file {}. The file server can be down.
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.task.db_update=Updating databases
appimage.uninstall.error.remove_folder=Could not remove the application installation directory {}
gem.appimage.info=Applications published at https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,23 +1,36 @@
gem.appimage.label=AppImage
gem.appimage.info=Aplicativos publicados en https://appimage.github.io/
appimage.install.permission=Concediendo permiso de ejecución a {}
appimage.install.extract=Extrayendo el contenido de {}
appimage.install.desktop_entry=Creando un atajo en el menú
appimage.uninstall.error.remove_folder=No se pudo eliminar el directorio de instalación de la aplicación {}
appimage.info.url_download=URL del archivo
appimage.info.icon_path=icono
appimage.history.0_version=versión
appimage.history.1_published_at=fecha
appimage.history.2_url_download=URL del archivo
appimage.downgrade.impossible.title=Imposible revertir la versión
appimage.downgrade.impossible.body={} solo tiene una versión publicada.
appimage.downgrade.unknown_version.body=No fue posible identificar la versión actual de {} en su historial de versiones
appimage.downgrade.first_version={} está en su primera versión publicada
appimage.downgrade.uninstall_current_version=No fue posible desinstalar la versión actual de {}
appimage.downgrade.install_version=No fue posible instalar la versión {} ({})
appimage.install.download.error=No fue posible descargar el archivo {}. El servidor del archivo puede estar inactivo.
appimage.install.appimagelauncher.error={appimgl} no permite la instalación de {app}. Desinstale {appimgl}, reinicie su sistema e intente instalar {app} nuevamente.
appimage.config.db_updates=Actualización de la base de datos
appimage.config.db_updates.activated=activada
appimage.config.db_updates.activated.tip=Será posible buscar actualizaciones relacionadas con las aplicaciones instaladas
appimage.config.db_updates.interval.tip=Intervalo de actualización en SEGUNDOS
appimage.config.db_updates.interval.tip=Intervalo de actualización en SEGUNDOS
appimage.custom_action.install_file=Instalar archivo AppImage
appimage.custom_action.install_file.details=Detalles de instalación
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.details=Detalles de actualización
appimage.custom_action.manual_update.status=Actualizando
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.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.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.download.error=No fue posible descargar el archivo {}. El servidor del archivo puede estar inactivo.
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.task.db_update=Actualizando base de datos
appimage.uninstall.error.remove_folder=No se pudo eliminar el directorio de instalación de la aplicación {}
gem.appimage.info=Aplicativos publicados en https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,24 +1,36 @@
gem.appimage.label=AppImage
gem.appimage.info=Applicazioni pubblicate su https://appimage.github.io/
appimage.install.permission=Gdare il permesso di esecuzione a {}
appimage.install.extract=Estrarre il contenuto da {}
appimage.install.desktop_entry=Genera un collegamento al menu
appimage.uninstall.error.remove_folder=Impossibile rimuovere la directory di installazione dell'applicazione {}
appimage.info.url_download=File URL
appimage.info.icon_path=icona
appimage.history.0_version=versione
appimage.history.1_published_at=data
appimage.history.2_url_download=File URL
appimage.downgrade.impossible.title=Impossibile eseguire il downgrade
appimage.downgrade.impossible.body={} ha solo una versione pubblicata.
appimage.downgrade.unknown_version.body=Non è stato possibile identificare la {} versione corrente nella sua cronologia delle versioni
appimage.downgrade.first_version={} è nella sua prima versione pubblicata
appimage.error.uninstall_current_version = Non è stato possibile disinstallare la versione corrente di {}
appimage.downgrade.install_version=Non è stato possibile installare la versione {} ({})
appimage.install.download.error=Non è stato possibile scaricare il file {}. Il file server può essere inattivo.
appimage.install.appimagelauncher.error={appimgl} non consente l'installazione di {app}. Disinstallare {appimgl}, riavviare il sistema e provare a installare nuovamente {app}.
appimage.config.db_updates=Database update
appimage.config.db_updates.activated=activated
appimage.config.db_updates.activated.tip=It will be possible to check for updates related to the installed applications
appimage.config.db_updates.interval.tip=Update interval in SECONDS
appimage.custom_action.install_file=Install AppImage file
appimage.custom_action.install_file.details=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.details=Upgrade details
appimage.custom_action.manual_update.status=Upgrading
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.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.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.task.db_update=Aggiornamento dei database
appimage.uninstall.error.remove_folder=Impossibile rimuovere la directory di installazione dell'applicazione {}
gem.appimage.info=Applicazioni pubblicate su https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,23 +1,36 @@
gem.appimage.label=AppImage
gem.appimage.info=Aplicativos publicados em https://appimage.github.io/
appimage.install.permission=Concedendo permissão de execução para {}
appimage.install.extract=Extraindo o conteúdo de {}
appimage.install.desktop_entry=Criando um atalho no menu
appimage.uninstall.error.remove_folder=Não foi possível remover o diretóri ode instalação do aplicativo {}
appimage.info.url_download=URL do arquivo
appimage.info.icon_path=ícone
appimage.history.0_version=versão
appimage.history.1_published_at=data
appimage.history.2_url_download=URL do arquivo
appimage.downgrade.impossible.title=Impossível reverter a versão
appimage.downgrade.impossible.body={} tem somente uma versão publicada.
appimage.downgrade.unknown_version.body=Não foi possível identificar a versão atual de {} no seu histórico de versões
appimage.downgrade.first_version={} se encontra em sua primeira versão publicada
appimage.downgrade.uninstall_current_version=Não foi possível desinstalar a versão atual de {}
appimage.downgrade.install_version=Não foi possivel instalar a versão {} ({})
appimage.install.download.error=Não foi possível baixar o arquivo {}. O servidor do arquivo pode estar fora do ar.
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.config.db_updates=Atualização da base de dados
appimage.config.db_updates.activated=ativada
appimage.config.db_updates.activated.tip=Será possível verificar se há atualizações para os aplicativos instalados
appimage.config.db_updates.interval.tip=Intervalo de atualização em SEGUNDOS
appimage.config.db_updates.interval.tip=Intervalo de atualização em SEGUNDOS
appimage.custom_action.install_file=Instalar arquivo AppImage
appimage.custom_action.install_file.details=Detalhes de instalação
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.details=Detalhes de atualização
appimage.custom_action.manual_update.status=Atualizando
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.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.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.download.error=Não foi possível baixar o arquivo {}. O servidor do arquivo pode estar fora do ar.
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.task.db_update=Atualizando base de dados
appimage.uninstall.error.remove_folder=Não foi possível remover o diretóri ode instalação do aplicativo {}
gem.appimage.info=Aplicativos publicados em https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -1,23 +1,36 @@
gem.appimage.label=AppImage
gem.appimage.info=Приложения, опубликованные на https://appimage.github.io/
appimage.install.permission=Установить права на выполнение для {}
appimage.install.extract=Извлечь содержимое из {}
appimage.install.desktop_entry=Создать ярлык в меню
appimage.uninstall.error.remove_folder=Не удалось удалить каталог приложения {}
appimage.info.url_download=URL Файла
appimage.info.icon_path=Значок
appimage.history.0_version=версия
appimage.history.1_published_at=дата
appimage.history.2_url_download=URL Файла
appimage.downgrade.impossible.title=Не удалось понизить версию
appimage.downgrade.impossible.body={} Имеет только одну опубликованную версию
appimage.downgrade.unknown_version.body=Не удалось определить текущую версию {} в истории версий
appimage.downgrade.first_version={} первая опубликованная версия
appimage.error.uninstall_current_version=Не удалось удалить текущую версию {}
appimage.downgrade.install_version=Не удалось установить версию {} ({})
appimage.install.download.error=Не удалось загрузить файл {}. Файловый сервер не отвечает
appimage.install.appimagelauncher.error={appimgl} не позволяет установить {app} . Удалите {appimgl}, перезагрузите ваш компьютер и попробуйте снова установить {app} .
appimage.config.db_updates=Обновление базы данных
appimage.config.db_updates.activated=активировать
appimage.config.db_updates.activated.tip=Позволит проверять обновления установленных приложений
appimage.config.db_updates.interval.tip=Интервал обновления в секундах
appimage.custom_action.install_file=Install AppImage file
appimage.custom_action.install_file.details=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.details=Upgrade details
appimage.custom_action.manual_update.status=Upgrading
appimage.downgrade.first_version={} первая опубликованная версия
appimage.downgrade.impossible.body={} Имеет только одну опубликованную версию
appimage.downgrade.impossible.title=Не удалось понизить версию
appimage.downgrade.install_version=Не удалось установить версию {} ({})
appimage.downgrade.unknown_version.body=Не удалось определить текущую версию {} в истории версий
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=No
appimage.info.imported.true=Yes
appimage.info.install_dir=Installation directory
appimage.info.url_download=URL Файла
appimage.install.appimagelauncher.error={appimgl} не позволяет установить {app} . Удалите {appimgl}, перезагрузите ваш компьютер и попробуйте снова установить {app} .
appimage.install.desktop_entry=Создать ярлык в меню
appimage.install.download.error=Не удалось загрузить файл {}. Файловый сервер не отвечает
appimage.install.extract=Извлечь содержимое из {}
appimage.install.imported.rename_error=It was not possible to move the file {} to {}
appimage.install.permission=Установить права на выполнение для {}
appimage.task.db_update=Updating databases
appimage.uninstall.error.remove_folder=Не удалось удалить каталог приложения {}
gem.appimage.info=Приложения, опубликованные на https://appimage.github.io/
gem.appimage.label=AppImage

View File

@@ -9,33 +9,54 @@ from threading import Thread
import requests
from bauh.api.abstract.handler import TaskManager
from bauh.api.http import HttpClient
from bauh.commons import internet
from bauh.gems.appimage import LOCAL_PATH
from bauh.gems.appimage import LOCAL_PATH, get_icon_path
from bauh.view.util.translation import I18n
class DatabaseUpdater(Thread):
URL_DB = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/appimage/dbs.tar.gz'
COMPRESS_FILE_PATH = LOCAL_PATH + '/db.tar.gz'
def __init__(self, http_client: HttpClient, logger: logging.Logger, db_locks: dict, interval: int):
def __init__(self, task_man: TaskManager, i18n: I18n, http_client: HttpClient, logger: logging.Logger, db_locks: dict, interval: int):
super(DatabaseUpdater, self).__init__(daemon=True)
self.http_client = http_client
self.logger = logger
self.db_locks = db_locks
self.sleep = interval
self.i18n = i18n
self.task_man = task_man
self.task_id = 'appim_db'
def _finish_task(self):
if self.task_man:
self.task_man.update_progress(self.task_id, 100, None)
self.task_man.finish_task(self.task_id)
self.task_man = None
def download_databases(self):
if self.task_man:
self.task_man.register_task(self.task_id, self.i18n['appimage.task.db_update'], get_icon_path())
self.task_man.update_progress(self.task_id, 10, None)
try:
if not internet.is_available(self.http_client, self.logger):
if not internet.is_available():
self._finish_task()
return
except requests.exceptions.ConnectionError:
self.logger.warning('The internet connection seems to be off.')
self._finish_task()
return
self.logger.info('Retrieving AppImage databases')
res = self.http_client.get(self.URL_DB)
try:
res = self.http_client.get(self.URL_DB, session=False)
except Exception as e:
self.logger.error("An error ocurred while downloading the AppImage database: {}".format(e.__class__.__name__))
res = None
if res:
Path(LOCAL_PATH).mkdir(parents=True, exist_ok=True)
@@ -71,9 +92,10 @@ class DatabaseUpdater(Thread):
self.logger.info('Deleting {}'.format(self.COMPRESS_FILE_PATH))
os.remove(self.COMPRESS_FILE_PATH)
self.logger.info('Successfully removed {}'.format(self.COMPRESS_FILE_PATH))
self._finish_task()
else:
self.logger.warning('Could not download the database file {}'.format(self.URL_DB))
self._finish_task()
def run(self):
while True: