diff --git a/CHANGELOG.md b/CHANGELOG.md index 014cc8c7..b1468246 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [0.9.19] +### Fixes +- AppImage + - manual installation: not generating desktop entries for AppImage files providing empty .desktop files (https://github.com/vinifmor/bauh/issues/186)[#186] + ## [0.9.18] 2021-06-18 ### Fixes - Arch diff --git a/bauh/__init__.py b/bauh/__init__.py index 1cf69e8d..af228711 100644 --- a/bauh/__init__.py +++ b/bauh/__init__.py @@ -1,4 +1,4 @@ -__version__ = '0.9.18' +__version__ = '0.9.19' __app_name__ = 'bauh' import os diff --git a/bauh/gems/appimage/controller.py b/bauh/gems/appimage/controller.py index b789c6de..a4ea1ee2 100644 --- a/bauh/gems/appimage/controller.py +++ b/bauh/gems/appimage/controller.py @@ -561,18 +561,24 @@ class AppImageManager(SoftwareManager): with open('{}/{}'.format(extracted_folder, desktop_entry)) as f: de_content = f.read() - de_content = replace_desktop_entry_exec_command(desktop_entry=de_content, - appname=pkg.name, - file_path=file_path) - + if de_content: + de_content = replace_desktop_entry_exec_command(desktop_entry=de_content, + appname=pkg.name, + file_path=file_path) extracted_icon = self._find_icon_file(extracted_folder) if extracted_icon: icon_path = out_dir + '/logo.' + extracted_icon.split('/')[-1].split('.')[-1] shutil.copy(extracted_icon, icon_path) - de_content = RE_DESKTOP_ICON.sub('Icon={}\n'.format(icon_path), de_content) + + if de_content: + de_content = RE_DESKTOP_ICON.sub('Icon={}\n'.format(icon_path), de_content) + pkg.icon_path = icon_path + if not de_content: + de_content = pkg.to_desktop_entry() + Path(DESKTOP_ENTRIES_PATH).mkdir(parents=True, exist_ok=True) with open(self._gen_desktop_entry_path(pkg), 'w+') as f: diff --git a/bauh/gems/appimage/model.py b/bauh/gems/appimage/model.py index d5a65142..c8e28bd7 100644 --- a/bauh/gems/appimage/model.py +++ b/bauh/gems/appimage/model.py @@ -1,4 +1,5 @@ import re +from io import StringIO from typing import List, Optional from bauh.api.abstract.model import SoftwarePackage, CustomSoftwareAction @@ -127,3 +128,20 @@ class AppImage(SoftwarePackage): def get_clean_name(self) -> Optional[str]: if self.name: return 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.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()