def parse_and_reformat(self): self._parser = configparser.ConfigParser(interpolation=None) self._parser.optionxform = str self._parser.read(self._path, encoding="utf-8") section = "Desktop Entry" if section not in self._parser.sections(): raise errors.InvalidDesktopFileError( self._filename, "missing 'Desktop Entry' section") if "Exec" not in self._parser[section]: raise errors.InvalidDesktopFileError(self._filename, "missing 'Exec' key") # XXX: do we want to allow more parameters for Exec? if self._name == self._snap_name: exec_value = "{} %U".format(self._name) else: exec_value = "{}.{} %U".format(self._snap_name, self._name) self._parser[section]["Exec"] = exec_value if "Icon" in self._parser[section]: icon = self._parser[section]["Icon"] if icon.startswith("/"): icon = icon.lstrip("/") if os.path.exists(os.path.join(self._prime_dir, icon)): self._parser[section]["Icon"] = "${{SNAP}}/{}".format(icon) else: logger.warning( "Icon {} specified in desktop file {} not found " "in prime directory".format(icon, self._filename))
def __init__(self, *, name, filename, snap_name, prime_dir): self._name = name self._filename = filename self._snap_name = snap_name self._prime_dir = prime_dir self._path = os.path.join(prime_dir, filename) if not os.path.exists(self._path): raise errors.InvalidDesktopFileError( filename, 'does not exist (defined in the app {!r})'.format(name))
def parse_and_reformat(self, extracted_metadata: _metadata.ExtractedMetadata): self._parser = configparser.ConfigParser(interpolation=None) # mypy type checking ignored, see https://github.com/python/mypy/issues/506 self._parser.optionxform = str # type: ignore self._parser.read(self._path, encoding="utf-8") section = "Desktop Entry" if section not in self._parser.sections(): raise errors.InvalidDesktopFileError( self._filename, "missing 'Desktop Entry' section" ) if "Exec" not in self._parser[section]: raise errors.InvalidDesktopFileError(self._filename, "missing 'Exec' key") # XXX: do we want to allow more parameters for Exec? if self._name == self._snap_name: exec_value = "{} %U".format(self._name) else: exec_value = "{}.{} %U".format(self._snap_name, self._name) self._parser[section]["Exec"] = exec_value if "Icon" in self._parser[section]: icon = self._parser[section]["Icon"] # Extracted metadata (e.g. from the AppStream) can override the # icon location. if extracted_metadata: metadata_icon = extracted_metadata.get_icon() if metadata_icon is not None: icon = metadata_icon icon = icon.lstrip("/") if icon.startswith("${SNAP}/") and os.path.exists( os.path.join(self._prime_dir, icon[8:]) ): self._parser[section]["Icon"] = icon elif os.path.exists(os.path.join(self._prime_dir, icon)): self._parser[section]["Icon"] = "${{SNAP}}/{}".format(icon) else: logger.warning( "Icon {} specified in desktop file {} not found " "in prime directory".format(icon, self._filename) )