def from_dotdesktop(cls, app_def: Path, distro: WSLDistro) -> Optional[WSLApp]: """ Return a WSLApp from a .desktop file. Args: app_def: .desktop file path """ de = DesktopEntry(app_def) name = de.getName() generic_name = de.getGenericName() cmd = de.getExec() gui = not de.getTerminal() icon = de.getIcon() if name: return cls(name, generic_name, cmd, gui, icon) else: # This is a symlink linux_path = str(app_def)[str(app_def).index(r"\\wsl$") + 7:] linux_path = linux_path[linux_path.index("\\"):].replace("\\", "/") # Turn symlink target into Windows Path symlink = distro.get_cmd_output(f"readlink -f -e '{linux_path}'") app_def = distro._unc_path_from_cmd(symlink) de = DesktopEntry(app_def) name = de.getName() generic_name = de.getGenericName() cmd = de.getExec() gui = not de.getTerminal() icon = de.getIcon() if name: return cls(name, generic_name, cmd, gui, icon) return None
def _get_app_list(self, directory, user): for root, dirs, files in os.walk(directory): for name in files: if name.endswith(".desktop"): app_path = root + "/" + name # setup desktop entry to access its elements xgd_de = DesktopEntry(app_path) # self.app_entry = Desktop_Entry( name, xgd_de.getName( ), xgd_de.getGenericName( ), xgd_de.getNoDisplay( ), xgd_de.getHidden( ), xgd_de.getOnlyShowIn( ), xgd_de.getNotShowIn( ), xgd_de.getCategories( ), app_path, user, False ) # Just as a note, skip no display or hidden .desktop if not (self.app_entry.de_nodisp or self.app_entry.de_hidden): self._add_entry(self.app_entry)
def test_values(self): entry = DesktopEntry(self.test_file) self.assertEqual(entry.getName(), 'gedit') self.assertEqual(entry.getGenericName(), 'Text Editor') self.assertEqual(entry.getNoDisplay(), False) self.assertEqual(entry.getComment(), 'Edit text files') self.assertEqual(entry.getIcon(), 'accessories-text-editor') self.assertEqual(entry.getHidden(), False) self.assertEqual(entry.getOnlyShowIn(), []) self.assertEqual(entry.getExec(), 'gedit %U') self.assertEqual(entry.getTerminal(), False) self.assertEqual(entry.getMimeTypes(), ['text/plain']) self.assertEqual(entry.getCategories(), ['GNOME', 'GTK', 'Utility', 'TextEditor']) self.assertEqual(entry.getTerminal(), False)
def test_values(self): entry = DesktopEntry(self.test_file) self.assertEqual(entry.getName(), 'gedit') self.assertEqual(entry.getGenericName(), 'Text Editor') self.assertEqual(entry.getNoDisplay(), False) self.assertEqual(entry.getComment(), 'Edit text files') self.assertEqual(entry.getIcon(), 'accessories-text-editor') self.assertEqual(entry.getHidden(), False) self.assertEqual(entry.getOnlyShowIn(), []) self.assertEqual(entry.getExec(), 'gedit %U') self.assertEqual(entry.getTerminal(), False) self.assertEqual(entry.getMimeTypes(), ['text/plain']) self.assertEqual(entry.getCategories(), ['GNOME', 'GTK', 'Utility', 'TextEditor']) self.assertEqual(entry.getTerminal(), False)
def from_dotdesktop(app_def): """ Return a WSLApp from a .desktop file. Args: app_def: .desktop file path """ de = DesktopEntry(app_def) name = de.getName() generic_name = de.getGenericName() cmd = de.getExec() gui = not de.getTerminal() icon = de.getIcon() return { "name": name, "generic_name": generic_name, "cmd": cmd, "gui": gui, "icon": icon }