[view] enhancement: able to open URLs in the browser (package info window)

This commit is contained in:
Vinicius Moreira
2023-12-01 08:02:53 -03:00
parent 4000f0116a
commit f7337313c3
11 changed files with 42 additions and 11 deletions

View File

@@ -21,6 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- the "Skip" button on the initialization panel is now enabled after 10 seconds [#310](https://github.com/vinifmor/bauh/issues/310) - the "Skip" button on the initialization panel is now enabled after 10 seconds [#310](https://github.com/vinifmor/bauh/issues/310)
- faster package icons download - faster package icons download
- faster packages filtering (`type`, `category`, `name`, etc... up to **95% less time**) - faster packages filtering (`type`, `category`, `name`, etc... up to **95% less time**)
- on the package information dialog is now possible to open fields associated with URLs in the browser [#340](https://github.com/vinifmor/bauh/issues/340)
- displaying a text warning before installing an unverified package (unverified = not verified by the system maintainers or a trustable source) - displaying a text warning before installing an unverified package (unverified = not verified by the system maintainers or a trustable source)
- at the moment the following packaging formats are considered completely **unverified**: AppImage, AUR, native Web application - at the moment the following packaging formats are considered completely **unverified**: AppImage, AUR, native Web application
- Snap supports both verified and unverified software - Snap supports both verified and unverified software

View File

@@ -1,4 +1,6 @@
import subprocess
from collections.abc import Iterable from collections.abc import Iterable
from subprocess import Popen
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon, QCursor from PyQt5.QtGui import QIcon, QCursor
@@ -7,6 +9,7 @@ from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \
QHBoxLayout QHBoxLayout
from bauh.api.abstract.cache import MemoryCache from bauh.api.abstract.cache import MemoryCache
from bauh.commons.regex import RE_URL
from bauh.view.qt.components import new_spacer from bauh.view.qt.components import new_spacer
from bauh.view.qt.qt_utils import get_current_screen_geometry from bauh.view.qt.qt_utils import get_current_screen_geometry
from bauh.view.util.translation import I18n from bauh.view.util.translation import I18n
@@ -64,7 +67,7 @@ class InfoDialog(QDialog):
val = str(pkg_info[attr]).strip() val = str(pkg_info[attr]).strip()
show_val = val show_val = val
i18n_val = i18n.get('{}.{}'.format(i18n_key, val.lower())) i18n_val = i18n.get(f"{i18n_key}.{val.lower()}")
if i18n_val: if i18n_val:
val = i18n_val val = i18n_val
@@ -82,7 +85,8 @@ class InfoDialog(QDialog):
self.gbox_info.layout().addWidget(label, idx, 0) self.gbox_info.layout().addWidget(label, idx, 0)
self.gbox_info.layout().addWidget(text, idx, 1) self.gbox_info.layout().addWidget(text, idx, 1)
self._gen_show_button(idx, show_val)
self._gen_show_button(idx=idx, val=show_val)
layout.addWidget(scroll) layout.addWidget(scroll)
@@ -113,18 +117,35 @@ class InfoDialog(QDialog):
self.setMaximumHeight(int(screen_height * 0.8)) self.setMaximumHeight(int(screen_height * 0.8))
self.adjustSize() self.adjustSize()
def _gen_show_button(self, idx: int, val): @staticmethod
def open_url(url: str):
Popen(["xdg-open", url], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL)
def show_full_field(): def _show_full_field_val(self, val: str):
self.gbox_info.hide() self.gbox_info.hide()
self.bt_back.setVisible(True) self.bt_back.setVisible(True)
self.text_field.show() self.text_field.show()
self.text_field.setPlainText(val) self.text_field.setPlainText(val)
bt_full_field = QPushButton(self.i18n['show'].capitalize()) def _gen_show_button(self, idx: int, val: str):
bt_full_field.setObjectName('show')
is_url = bool(RE_URL.match(val)) if val else False
if is_url:
bt_label = self.i18n["manage_window.info.open_url"]
def _show_field():
self.open_url(val)
else:
bt_label = self.i18n["show"].capitalize()
def _show_field():
self._show_full_field_val(val)
bt_full_field = QPushButton(bt_label)
bt_full_field.setObjectName("show")
bt_full_field.setCursor(QCursor(Qt.PointingHandCursor)) bt_full_field.setCursor(QCursor(Qt.PointingHandCursor))
bt_full_field.clicked.connect(show_full_field) bt_full_field.clicked.connect(_show_field)
self.gbox_info.layout().addWidget(bt_full_field, idx, 2) self.gbox_info.layout().addWidget(bt_full_field, idx, 2)
def back_to_info(self): def back_to_info(self):

View File

@@ -351,6 +351,7 @@ manage_window.columns.installed=Installed
manage_window.columns.latest_version=Versió més recent manage_window.columns.latest_version=Versió més recent
manage_window.columns.update=Voleu actualitzar? manage_window.columns.update=Voleu actualitzar?
manage_window.info.no_info=There is no information available for {} manage_window.info.no_info=There is no information available for {}
manage_window.info.open_url=Obrir
manage_window.label.apps_displayed.tip=Applications displayed / available manage_window.label.apps_displayed.tip=Applications displayed / available
manage_window.label.updates=Actualitzacions manage_window.label.updates=Actualitzacions
manage_window.name_filter.button_tooltip=Click here to filter apps by name manage_window.name_filter.button_tooltip=Click here to filter apps by name

View File

@@ -353,6 +353,7 @@ manage_window.columns.installed=Installiert
manage_window.columns.latest_version=Neueste Version manage_window.columns.latest_version=Neueste Version
manage_window.columns.update=Upgraden? manage_window.columns.update=Upgraden?
manage_window.info.no_info=Es sind keine Informationen verfügbar für {} manage_window.info.no_info=Es sind keine Informationen verfügbar für {}
manage_window.info.open_url=Öffnen
manage_window.label.apps_displayed.tip=Anwendungen angezeigt / verfügbar manage_window.label.apps_displayed.tip=Anwendungen angezeigt / verfügbar
manage_window.label.updates=Aktualisierungen manage_window.label.updates=Aktualisierungen
manage_window.name_filter.button_tooltip=Klicken Sie hier, um Anwendungen nach Namen zu filtern manage_window.name_filter.button_tooltip=Klicken Sie hier, um Anwendungen nach Namen zu filtern

View File

@@ -353,6 +353,7 @@ manage_window.columns.installed=Installed
manage_window.columns.latest_version=Latest Version manage_window.columns.latest_version=Latest Version
manage_window.columns.update=Upgrade ? manage_window.columns.update=Upgrade ?
manage_window.info.no_info=There is no information available for {} manage_window.info.no_info=There is no information available for {}
manage_window.info.open_url=Open
manage_window.label.apps_displayed.tip=Applications displayed / available manage_window.label.apps_displayed.tip=Applications displayed / available
manage_window.label.updates=Updates manage_window.label.updates=Updates
manage_window.name_filter.button_tooltip=Click here to filter apps by name manage_window.name_filter.button_tooltip=Click here to filter apps by name

View File

@@ -352,6 +352,7 @@ manage_window.columns.installed=Instaladas
manage_window.columns.latest_version=Versión más reciente manage_window.columns.latest_version=Versión más reciente
manage_window.columns.update=¿Quiere actualizar? manage_window.columns.update=¿Quiere actualizar?
manage_window.info.no_info=No hay información disponible para {} manage_window.info.no_info=No hay información disponible para {}
manage_window.info.open_url=Abrir
manage_window.label.apps_displayed.tip=Applicaciones mostradas / disponibles manage_window.label.apps_displayed.tip=Applicaciones mostradas / disponibles
manage_window.label.updates=Actualizaciones manage_window.label.updates=Actualizaciones
manage_window.name_filter.button_tooltip=Haga clic aquí para filtrar aplicaciones por nombre manage_window.name_filter.button_tooltip=Haga clic aquí para filtrar aplicaciones por nombre

View File

@@ -349,6 +349,7 @@ manage_window.columns.installed=Installé
manage_window.columns.latest_version=Dernière Version manage_window.columns.latest_version=Dernière Version
manage_window.columns.update=Mettre à jour ? manage_window.columns.update=Mettre à jour ?
manage_window.info.no_info=There is no information available for {} manage_window.info.no_info=There is no information available for {}
manage_window.info.open_url=Ouvrir
manage_window.label.updates=Mises à jour manage_window.label.updates=Mises à jour
manage_window.name_filter.placeholder=Filtrer par nom manage_window.name_filter.placeholder=Filtrer par nom
manage_window.name_filter.tooltip=Taper ici pour filtrer les applications par nom manage_window.name_filter.tooltip=Taper ici pour filtrer les applications par nom

View File

@@ -352,6 +352,7 @@ manage_window.columns.installed=Installed
manage_window.columns.latest_version=Ultima Versione manage_window.columns.latest_version=Ultima Versione
manage_window.columns.update=Upgrade ? manage_window.columns.update=Upgrade ?
manage_window.info.no_info=There is no information available for {} manage_window.info.no_info=There is no information available for {}
manage_window.info.open_url=Aprire
manage_window.label.apps_displayed.tip=Applications displayed / available manage_window.label.apps_displayed.tip=Applications displayed / available
manage_window.label.updates=Aggiornamenti manage_window.label.updates=Aggiornamenti
manage_window.name_filter.button_tooltip=Click here to filter apps by name manage_window.name_filter.button_tooltip=Click here to filter apps by name

View File

@@ -351,6 +351,7 @@ manage_window.columns.installed=Instalado
manage_window.columns.latest_version=Última Versão manage_window.columns.latest_version=Última Versão
manage_window.columns.update=Atualizar ? manage_window.columns.update=Atualizar ?
manage_window.info.no_info=Não há informação disponível para {} manage_window.info.no_info=Não há informação disponível para {}
manage_window.info.open_url=Abrir
manage_window.label.apps_displayed.tip=Aplicações exibidas / disponíveis manage_window.label.apps_displayed.tip=Aplicações exibidas / disponíveis
manage_window.label.updates=Atualizações manage_window.label.updates=Atualizações
manage_window.name_filter.button_tooltip=Clique aqui para filtrar aplicativos por nome manage_window.name_filter.button_tooltip=Clique aqui para filtrar aplicativos por nome

View File

@@ -353,6 +353,7 @@ manage_window.columns.installed=Установленно
manage_window.columns.latest_version=Последняя версия manage_window.columns.latest_version=Последняя версия
manage_window.columns.update=Обновить? manage_window.columns.update=Обновить?
manage_window.info.no_info=Информация не доступна для {} manage_window.info.no_info=Информация не доступна для {}
manage_window.info.open_url=Открыть
manage_window.label.apps_displayed.tip=Отображаемые / доступные приложения manage_window.label.apps_displayed.tip=Отображаемые / доступные приложения
manage_window.label.updates=Обновления manage_window.label.updates=Обновления
manage_window.name_filter.button_tooltip=Нажмите здесь, чтобы отфильтровать приложения по названию manage_window.name_filter.button_tooltip=Нажмите здесь, чтобы отфильтровать приложения по названию

View File

@@ -350,6 +350,7 @@ manage_window.columns.installed=Yüklü
manage_window.columns.latest_version=Son sürüm manage_window.columns.latest_version=Son sürüm
manage_window.columns.update=Yükselt ? manage_window.columns.update=Yükselt ?
manage_window.info.no_info={} için bilgi yok manage_window.info.no_info={} için bilgi yok
manage_window.info.open_url=Açmak
manage_window.label.apps_displayed.tip=Görüntülenen uygulamalar / mevcut olanlar manage_window.label.apps_displayed.tip=Görüntülenen uygulamalar / mevcut olanlar
manage_window.label.updates=Güncellemeler manage_window.label.updates=Güncellemeler
manage_window.name_filter.button_tooltip=Click here to filter apps by name manage_window.name_filter.button_tooltip=Click here to filter apps by name