mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 00:04:15 +02:00
[appimage] fix: not able to launch AppImage files installed inside folders named with spaces
This commit is contained in:
@@ -50,10 +50,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
- new parameter **--offline**: it assumes the internet connection is off. Useful if the connection is bad/unstable and you just want to check your installed packages.
|
- new parameter **--offline**: it assumes the internet connection is off. Useful if the connection is bad/unstable and you just want to check your installed packages.
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
- Arch:
|
- AppImage
|
||||||
|
- not able to launch AppImage files installed inside folders named with spaces (e.g: "/path/my folder/abc.appimage")
|
||||||
|
|
||||||
|
- Arch
|
||||||
- search: not able to find installed packages that were renamed on the repositories (e.g: xapps -> xapp)
|
- search: not able to find installed packages that were renamed on the repositories (e.g: xapps -> xapp)
|
||||||
- not able to replace an installed package for a new one that replaces it during conflict resolutions (e.g: xapp replaces xapps)
|
- not able to replace an installed package for a new one that replaces it during conflict resolutions (e.g: xapp replaces xapps)
|
||||||
- AUR: not able to find some repository dependencies when their names are not an exact match (e.g: sc-controller [0.4.7-1] relies on "pylibacl". This dependency now is called "python-pylibacl")
|
- AUR: not able to find some repository dependencies when their names are not an exact match (e.g: sc-controller [0.4.7-1] relies on "pylibacl". This dependency now is called "python-pylibacl")
|
||||||
|
|
||||||
- UI
|
- UI
|
||||||
- history dialog: not able to maximize/minimize it on some systems
|
- history dialog: not able to maximize/minimize it on some systems
|
||||||
- wrong tooltips
|
- wrong tooltips
|
||||||
|
|||||||
@@ -454,7 +454,7 @@ class AppImageManager(SoftwareManager):
|
|||||||
def install(self, pkg: AppImage, root_password: str, disk_loader: DiskCacheLoader, watcher: ProcessWatcher) -> TransactionResult:
|
def install(self, pkg: AppImage, root_password: str, disk_loader: DiskCacheLoader, watcher: ProcessWatcher) -> TransactionResult:
|
||||||
handler = ProcessHandler(watcher)
|
handler = ProcessHandler(watcher)
|
||||||
|
|
||||||
out_dir = INSTALLATION_PATH + pkg.name.lower()
|
out_dir = INSTALLATION_PATH + pkg.get_clean_name()
|
||||||
counter = 0
|
counter = 0
|
||||||
while True:
|
while True:
|
||||||
if os.path.exists(out_dir):
|
if os.path.exists(out_dir):
|
||||||
@@ -530,7 +530,7 @@ class AppImageManager(SoftwareManager):
|
|||||||
with open('{}/{}'.format(extracted_folder, desktop_entry)) as f:
|
with open('{}/{}'.format(extracted_folder, desktop_entry)) as f:
|
||||||
de_content = f.read()
|
de_content = f.read()
|
||||||
|
|
||||||
de_content = RE_DESKTOP_EXEC.sub('Exec={}\n'.format(file_path), de_content)
|
de_content = RE_DESKTOP_EXEC.sub('Exec="{}"\n'.format(file_path), de_content)
|
||||||
|
|
||||||
extracted_icon = self._find_icon_file(extracted_folder)
|
extracted_icon = self._find_icon_file(extracted_folder)
|
||||||
|
|
||||||
@@ -565,7 +565,7 @@ class AppImageManager(SoftwareManager):
|
|||||||
return TransactionResult.fail()
|
return TransactionResult.fail()
|
||||||
|
|
||||||
def _gen_desktop_entry_path(self, app: AppImage) -> str:
|
def _gen_desktop_entry_path(self, app: AppImage) -> str:
|
||||||
return '{}/bauh_appimage_{}.desktop'.format(DESKTOP_ENTRIES_PATH, app.name.lower())
|
return '{}/bauh_appimage_{}.desktop'.format(DESKTOP_ENTRIES_PATH, app.get_clean_name())
|
||||||
|
|
||||||
def is_enabled(self) -> bool:
|
def is_enabled(self) -> bool:
|
||||||
return self.enabled
|
return self.enabled
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
from typing import List
|
import re
|
||||||
|
from typing import List, Optional
|
||||||
|
|
||||||
from bauh.api.abstract.model import SoftwarePackage, CustomSoftwareAction
|
from bauh.api.abstract.model import SoftwarePackage, CustomSoftwareAction
|
||||||
from bauh.commons import resource
|
from bauh.commons import resource
|
||||||
from bauh.gems.appimage import ROOT_DIR, INSTALLATION_PATH
|
from bauh.gems.appimage import ROOT_DIR, INSTALLATION_PATH
|
||||||
from bauh.view.util.translation import I18n
|
from bauh.view.util.translation import I18n
|
||||||
|
|
||||||
|
RE_MANY_SPACES = re.compile(r'\s+')
|
||||||
|
|
||||||
CACHED_ATTRS = {'name', 'description', 'version', 'url_download', 'author', 'license', 'source',
|
CACHED_ATTRS = {'name', 'description', 'version', 'url_download', 'author', 'license', 'source',
|
||||||
'icon_path', 'github', 'categories', 'imported', 'install_dir', 'symlink'}
|
'icon_path', 'github', 'categories', 'imported', 'install_dir', 'symlink'}
|
||||||
|
|
||||||
@@ -120,3 +123,7 @@ class AppImage(SoftwarePackage):
|
|||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
if isinstance(other, AppImage):
|
if isinstance(other, AppImage):
|
||||||
return self.name == other.name and self.local_file_path == other.local_file_path
|
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 RE_MANY_SPACES.sub('-', self.name.lower().strip())
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ class SymlinksVerifier(Thread):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def create_symlink(app: AppImage, file_path: str, logger: logging.Logger, watcher: ProcessWatcher = None):
|
def create_symlink(app: AppImage, file_path: str, logger: logging.Logger, watcher: ProcessWatcher = None):
|
||||||
logger.info("Creating a symlink for '{}'".format(app.name))
|
logger.info("Creating a symlink for '{}'".format(app.name))
|
||||||
possible_names = (app.name.lower(), '{}-appimage'.format(app.name.lower()))
|
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):
|
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))
|
logger.warning("'{}' is not a directory. It will not be possible to create a symlink for '{}'".format(SYMLINKS_DIR, app.name))
|
||||||
|
|||||||
Reference in New Issue
Block a user