refactoring modules structure | improving README and CHANGELOG
@@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
### Features
|
### Features
|
||||||
- Supporting AUR packages (install, uninstall, search, info, downgrade and history)
|
- Supporting AUR packages (install, uninstall, search, info, downgrade and history)
|
||||||
- Now it is possible to enable / disable the packaging technologies via graphical interface using the "Application types" action in the lower "Settings" menu
|
- Now it is possible to enable / disable the packaging technologies via graphical interface using the "Application types" action in the lower "Settings" menu
|
||||||
|
- Environment variables / parameters **BAUH_FLATPAK (--flatpak)** and **BAUH_SNAP (--snap)** removed in favor of the feature above
|
||||||
- Qt style / theme combo selector ( environment variable / parameter BAUH_THEME (--theme) removed )
|
- Qt style / theme combo selector ( environment variable / parameter BAUH_THEME (--theme) removed )
|
||||||
- New "Launch" button: can launch application packages
|
- New "Launch" button: can launch application packages
|
||||||
- New "Installed" button: quickly retrieves the installed packages without a full refresh ( available after a search )
|
- New "Installed" button: quickly retrieves the installed packages without a full refresh ( available after a search )
|
||||||
@@ -25,6 +26,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
- When a package is installed, it will be the first element of the table after refreshing
|
- When a package is installed, it will be the first element of the table after refreshing
|
||||||
- Progress bar status can now be controlled by the software manager while an operation is being executed
|
- Progress bar status can now be controlled by the software manager while an operation is being executed
|
||||||
- Flatpak: showing runtime branches as versions when they are not available
|
- Flatpak: showing runtime branches as versions when they are not available
|
||||||
|
- small UI improvements
|
||||||
|
|
||||||
### UI Changes
|
### UI Changes
|
||||||
- "Upgrade selected" and "Refresh" buttons now have text labels and new colors
|
- "Upgrade selected" and "Refresh" buttons now have text labels and new colors
|
||||||
|
|||||||
58
README.md
@@ -1,26 +1,38 @@
|
|||||||
## bauh
|
## bauh
|
||||||
|
|
||||||
Non-official graphical user interface for Flatpak / Snap application management (old **fpakman**). It is a tray icon that let the user known when new updates are available and
|
Graphical user interface to manage your Linux applications (packages) (old **fpakman**). It currently supports Flatpak, Snap and AUR packaging types. When you launch **bauh** you will see
|
||||||
an application management panel where you can search, update, install and uninstall applications.
|
a management panel where you can search, update, install and uninstall applications. You can also downgrade some applications depending on the package technology.
|
||||||
|
|
||||||
|
It has a **tray mode** (see **Settings** below) that attaches the application icon to the system tray providing a quick way to launch it. Also the icon will get red when updates are available.
|
||||||
|
|
||||||
### Developed with:
|
### Developed with:
|
||||||
- Python3 and Qt5.
|
- Python3 and Qt5.
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
- libappindicator3 ( for GTK3 desktop environments )
|
|
||||||
#### Debian-based distros
|
#### Debian-based distros
|
||||||
- python3-venv
|
- **python3.5** or above
|
||||||
|
- **pip3**
|
||||||
|
|
||||||
#### Arch-based distros
|
#### Arch-based distros
|
||||||
- python
|
- **python**
|
||||||
- python-requests
|
- **python-requests**
|
||||||
- python-virtualenv
|
- **python-pip**
|
||||||
- python-pip
|
- **python-pyqt5**
|
||||||
- python-pyqt5
|
|
||||||
|
##### Optional
|
||||||
|
- **flatpak**: to be able to handle Flatpak applications
|
||||||
|
- **snapd**: to be able to handle Snap applications
|
||||||
|
- **git**: to be able to downgrade AUR packages
|
||||||
|
- **wget**: to be able to download and install AUR packages
|
||||||
|
- **pacman**: to be able to handle AUR packages
|
||||||
|
- **libappindicator3**: for the **tray mode** in GTK3 desktop environments
|
||||||
|
|
||||||
|
|
||||||
### Distribution
|
### Distribution
|
||||||
**PyPi**
|
**PyPi**
|
||||||
```
|
```
|
||||||
sudo pip3 install bauh
|
pip3 install bauh (may require **sudo**)
|
||||||
```
|
```
|
||||||
|
|
||||||
**AUR**
|
**AUR**
|
||||||
@@ -29,13 +41,19 @@ As **bauh** package. There is also a staging version (**bauh-staging**) but is i
|
|||||||
|
|
||||||
|
|
||||||
### Manual installation:
|
### Manual installation:
|
||||||
If you prefer a manual and isolated installation, type the following commands within the cloned project folder:
|
If you prefer a manual and isolated installation:
|
||||||
|
|
||||||
|
If you cloned this project, type the following commands within its folder:
|
||||||
|
|
||||||
```
|
```
|
||||||
python3 -m venv env
|
python3 -m venv env ( creates a virtualenv in a folder called **env** )
|
||||||
env/bin/pip install .
|
env/bin/pip install . ( install the application code inside the **env** )
|
||||||
env/bin/bauh
|
env/bin/bauh ( launch the application )
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you want do not want to clone / download this repository, go your Home folder and execute the commands above, but replace the second by ```env/bin/pip install bauh```.
|
||||||
|
|
||||||
|
|
||||||
### Autostart
|
### Autostart
|
||||||
In order to autostart the application, use your Desktop Environment settings to register it as a startup application / script (**bauh --tray=1**).
|
In order to autostart the application, use your Desktop Environment settings to register it as a startup application / script (**bauh --tray=1**).
|
||||||
|
|
||||||
@@ -49,8 +67,6 @@ You can change some application settings via environment variables or arguments
|
|||||||
- **BAUH_ICON_EXPIRATION**: define a custom expiration time in SECONDS for cached icons. Default: 300 (5 minutes).
|
- **BAUH_ICON_EXPIRATION**: define a custom expiration time in SECONDS for cached icons. Default: 300 (5 minutes).
|
||||||
- **BAUH_DISK_CACHE**: enables / disables disk cache. When disk cache is enabled, the installed applications data are loaded faster. Use **0** (disable) or **1** (enable, default).
|
- **BAUH_DISK_CACHE**: enables / disables disk cache. When disk cache is enabled, the installed applications data are loaded faster. Use **0** (disable) or **1** (enable, default).
|
||||||
- **BAUH_DOWNLOAD_ICONS**: Enables / disables app icons download. It may improve the application speed depending on how applications data are being retrieved. Use **0** (disable) or **1** (enable, default).
|
- **BAUH_DOWNLOAD_ICONS**: Enables / disables app icons download. It may improve the application speed depending on how applications data are being retrieved. Use **0** (disable) or **1** (enable, default).
|
||||||
- **BAUH_FLATPAK**: enables / disables flatpak usage. Use **0** (disable) or **1** (enabled, default)
|
|
||||||
- **BAUH_SNAP**: enables / disables snap usage. Use **0** (disable) or **1** (enabled, default)
|
|
||||||
- **BAUH_CHECK_PACKAGING_ONCE**: If the available supported packaging types should be checked ONLY once. It improves the application speed if enabled, but can generate errors if you uninstall any packaging technology while using it, and every time a supported packaging type is installed it will only be available after a restart. Use **0** (disable, default) or **1** (enable).
|
- **BAUH_CHECK_PACKAGING_ONCE**: If the available supported packaging types should be checked ONLY once. It improves the application speed if enabled, but can generate errors if you uninstall any packaging technology while using it, and every time a supported packaging type is installed it will only be available after a restart. Use **0** (disable, default) or **1** (enable).
|
||||||
- **BAUH_TRAY**: If the tray icon and update-check daemon should be created. Use **0** (disable, default) or **1** (enable).
|
- **BAUH_TRAY**: If the tray icon and update-check daemon should be created. Use **0** (disable, default) or **1** (enable).
|
||||||
- **BAUH_SUGGESTIONS**: If application suggestions should be displayed if no app is installed (runtimes do not count as apps). Use **0** (disable) or **1** (enable, default).
|
- **BAUH_SUGGESTIONS**: If application suggestions should be displayed if no app is installed (runtimes do not count as apps). Use **0** (disable) or **1** (enable, default).
|
||||||
@@ -64,6 +80,16 @@ with the technology that I don't care every time an action is executed.
|
|||||||
- If you don't mind to see the applications icons, you can set "download-icons=0" (**bauh --download-icons=0**). The application may have a slight response improvement, since it will reduce the parallelism within it.
|
- If you don't mind to see the applications icons, you can set "download-icons=0" (**bauh --download-icons=0**). The application may have a slight response improvement, since it will reduce the parallelism within it.
|
||||||
- If you don't mind app suggestions, disable it (**bauh --sugs=0**)
|
- If you don't mind app suggestions, disable it (**bauh --sugs=0**)
|
||||||
|
|
||||||
|
|
||||||
|
### Code structure
|
||||||
|
#### Modules
|
||||||
|
**view**: code associated with the graphical interface
|
||||||
|
**gems**: code responsible to work with the different packaging technologies (every submodule deals with one or more type)
|
||||||
|
**api**: code abstractions representing the main actions that a user can do with Linux packages (search, install, ...). These abstractions are implemented by the *gems*, and
|
||||||
|
the **view** code is only attached to them (it does not know how the **gems** handle the actions)
|
||||||
|
**commons**: common code used by **gem** and **view**
|
||||||
|
|
||||||
|
|
||||||
### Roadmap
|
### Roadmap
|
||||||
- Support for other packaging technologies
|
- Support for other packaging technologies
|
||||||
- Separate modules for each packaging technology
|
- Separate modules for each packaging technology
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ if system_locale == 'pt':
|
|||||||
comment = "Gerencie seus aplicativos Flatpak / Snap / AUR "
|
comment = "Gerencie seus aplicativos Flatpak / Snap / AUR "
|
||||||
tray = 'bandeja'
|
tray = 'bandeja'
|
||||||
elif system_locale == 'es':
|
elif system_locale == 'es':
|
||||||
comment = "Administre sus aplicaciones Flatpak / Snap / AUR"
|
comment = "Administre sus aplicativos Flatpak / Snap / AUR"
|
||||||
tray = 'bandeja'
|
tray = 'bandeja'
|
||||||
else:
|
else:
|
||||||
comment = "Manage your Flatpak / Snap / AUR applications"
|
comment = "Manage your Flatpak / Snap / AUR applications"
|
||||||
|
|||||||
10
bauh/app.py
@@ -6,13 +6,13 @@ from PyQt5.QtWidgets import QApplication
|
|||||||
from bauh import __version__, __app_name__, app_args, ROOT_DIR
|
from bauh import __version__, __app_name__, app_args, ROOT_DIR
|
||||||
from bauh.api.abstract.controller import ApplicationContext
|
from bauh.api.abstract.controller import ApplicationContext
|
||||||
from bauh.api.http import HttpClient
|
from bauh.api.http import HttpClient
|
||||||
from bauh.core import gems, config
|
from bauh.view.core import gems, config
|
||||||
from bauh.core.controller import GenericSoftwareManager
|
from bauh.view.core.controller import GenericSoftwareManager
|
||||||
from bauh.util import util, logs, resource
|
from bauh.view.util import util, logs, resource
|
||||||
from bauh.util.cache import DefaultMemoryCacheFactory, CacheCleaner
|
|
||||||
from bauh.util.disk import DefaultDiskCacheLoaderFactory
|
|
||||||
from bauh.view.qt.systray import TrayIcon
|
from bauh.view.qt.systray import TrayIcon
|
||||||
from bauh.view.qt.window import ManageWindow
|
from bauh.view.qt.window import ManageWindow
|
||||||
|
from bauh.view.util.cache import CacheCleaner, DefaultMemoryCacheFactory
|
||||||
|
from bauh.view.util.disk import DefaultDiskCacheLoaderFactory
|
||||||
|
|
||||||
args = app_args.read()
|
args = app_args.read()
|
||||||
logger = logs.new_logger(__app_name__, bool(args.logs))
|
logger = logs.new_logger(__app_name__, bool(args.logs))
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
import re
|
|
||||||
|
|
||||||
HTML_RE = re.compile(r'<[^>]+>')
|
|
||||||
|
|
||||||
|
|
||||||
def strip_html(string: str):
|
|
||||||
return HTML_RE.sub('', string)
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
import inspect
|
import inspect
|
||||||
import os
|
import os
|
||||||
import pkgutil
|
import pkgutil
|
||||||
from typing import List, Type
|
from typing import List
|
||||||
|
|
||||||
from bauh import ROOT_DIR
|
from bauh import ROOT_DIR
|
||||||
from bauh.api.abstract.controller import SoftwareManager, ApplicationContext
|
from bauh.api.abstract.controller import SoftwareManager, ApplicationContext
|
||||||
from bauh.util import util
|
from bauh.view.util import util
|
||||||
|
|
||||||
|
|
||||||
def find_manager(member):
|
def find_manager(member):
|
||||||
@@ -3,7 +3,7 @@ from PyQt5.QtGui import QPixmap
|
|||||||
from PyQt5.QtWidgets import QVBoxLayout, QDialog, QLabel
|
from PyQt5.QtWidgets import QVBoxLayout, QDialog, QLabel
|
||||||
|
|
||||||
from bauh import __version__, __app_name__
|
from bauh import __version__, __app_name__
|
||||||
from bauh.util import resource
|
from bauh.view.util import resource
|
||||||
|
|
||||||
PROJECT_URL = 'https://github.com/vinifmor/' + __app_name__
|
PROJECT_URL = 'https://github.com/vinifmor/' + __app_name__
|
||||||
LICENSE_URL = 'https://raw.githubusercontent.com/vinifmor/{}/master/LICENSE'.format(__app_name__)
|
LICENSE_URL = 'https://raw.githubusercontent.com/vinifmor/{}/master/LICENSE'.format(__app_name__)
|
||||||
@@ -30,7 +30,7 @@ class AboutDialog(QDialog):
|
|||||||
layout.addWidget(QLabel(''))
|
layout.addWidget(QLabel(''))
|
||||||
|
|
||||||
line_desc = QLabel(self)
|
line_desc = QLabel(self)
|
||||||
line_desc.setStyleSheet('font-size: 10px; font-weight: bold;')
|
line_desc.setStyleSheet('font-size: 11px; font-weight: bold;')
|
||||||
line_desc.setText(locale_keys['about.info.desc'])
|
line_desc.setText(locale_keys['about.info.desc'])
|
||||||
line_desc.setAlignment(Qt.AlignCenter)
|
line_desc.setAlignment(Qt.AlignCenter)
|
||||||
line_desc.setMinimumWidth(400)
|
line_desc.setMinimumWidth(400)
|
||||||
@@ -39,14 +39,14 @@ class AboutDialog(QDialog):
|
|||||||
layout.addWidget(QLabel(''))
|
layout.addWidget(QLabel(''))
|
||||||
|
|
||||||
label_more_info = QLabel()
|
label_more_info = QLabel()
|
||||||
label_more_info.setStyleSheet('font-size: 9px;')
|
label_more_info.setStyleSheet('font-size: 10px;')
|
||||||
label_more_info.setText(locale_keys['about.info.link'] + ": <a href='{url}'>{url}</a>".format(url=PROJECT_URL))
|
label_more_info.setText(locale_keys['about.info.link'] + ": <a href='{url}'>{url}</a>".format(url=PROJECT_URL))
|
||||||
label_more_info.setOpenExternalLinks(True)
|
label_more_info.setOpenExternalLinks(True)
|
||||||
label_more_info.setAlignment(Qt.AlignCenter)
|
label_more_info.setAlignment(Qt.AlignCenter)
|
||||||
layout.addWidget(label_more_info)
|
layout.addWidget(label_more_info)
|
||||||
|
|
||||||
label_license = QLabel()
|
label_license = QLabel()
|
||||||
label_license.setStyleSheet('font-size: 9px;')
|
label_license.setStyleSheet('font-size: 10px;')
|
||||||
label_license.setText("<a href='{}'>{}</a>".format(LICENSE_URL, locale_keys['about.info.license']))
|
label_license.setText("<a href='{}'>{}</a>".format(LICENSE_URL, locale_keys['about.info.license']))
|
||||||
label_license.setOpenExternalLinks(True)
|
label_license.setOpenExternalLinks(True)
|
||||||
label_license.setAlignment(Qt.AlignCenter)
|
label_license.setAlignment(Qt.AlignCenter)
|
||||||
@@ -55,7 +55,7 @@ class AboutDialog(QDialog):
|
|||||||
layout.addWidget(QLabel(''))
|
layout.addWidget(QLabel(''))
|
||||||
|
|
||||||
label_rate = QLabel()
|
label_rate = QLabel()
|
||||||
label_rate.setStyleSheet('font-size: 9px; font-weight: bold;')
|
label_rate.setStyleSheet('font-size: 10px; font-weight: bold;')
|
||||||
label_rate.setText(locale_keys['about.info.rate'] + ' :)')
|
label_rate.setText(locale_keys['about.info.rate'] + ' :)')
|
||||||
label_rate.setOpenExternalLinks(True)
|
label_rate.setOpenExternalLinks(True)
|
||||||
label_rate.setAlignment(Qt.AlignCenter)
|
label_rate.setAlignment(Qt.AlignCenter)
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ from PyQt5.QtWidgets import QTableWidget, QTableView, QMenu, QAction, QTableWidg
|
|||||||
|
|
||||||
from bauh.api.abstract.cache import MemoryCache
|
from bauh.api.abstract.cache import MemoryCache
|
||||||
from bauh.api.abstract.model import PackageStatus
|
from bauh.api.abstract.model import PackageStatus
|
||||||
from bauh.util import resource
|
from bauh.commons.html import strip_html
|
||||||
from bauh.util.html import strip_html
|
from bauh.view.util import resource
|
||||||
from bauh.view.qt import dialog
|
from bauh.view.qt import dialog
|
||||||
from bauh.view.qt.components import IconButton
|
from bauh.view.qt.components import IconButton
|
||||||
from bauh.view.qt.view_model import PackageView, PackageViewStatus
|
from bauh.view.qt.view_model import PackageView, PackageViewStatus
|
||||||
@@ -385,13 +385,13 @@ class AppsTable(QTableWidget):
|
|||||||
def get_info():
|
def get_info():
|
||||||
self.window.get_app_info(pkg)
|
self.window.get_app_info(pkg)
|
||||||
|
|
||||||
item.addWidget(IconButton(icon_path=resource.get_path('img/app_info.svg'), action=get_info, background='#2E68D3'))
|
item.addWidget(IconButton(icon_path=resource.get_path('img/app_info.svg'), action=get_info, background='#2E68D3', tooltip=self.i18n['action.info.tooltip']))
|
||||||
|
|
||||||
def handle_click():
|
def handle_click():
|
||||||
self.show_pkg_settings(pkg)
|
self.show_pkg_settings(pkg)
|
||||||
|
|
||||||
if self.has_any_settings(pkg):
|
if self.has_any_settings(pkg):
|
||||||
bt = IconButton(icon_path=resource.get_path('img/app_settings.svg'), action=handle_click, background='#12ABAB')
|
bt = IconButton(icon_path=resource.get_path('img/app_settings.svg'), action=handle_click, background='#12ABAB', tooltip=self.i18n['action.settings.tooltip'])
|
||||||
item.addWidget(bt)
|
item.addWidget(bt)
|
||||||
|
|
||||||
self.setCellWidget(idx, col, item)
|
self.setCellWidget(idx, col, item)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from PyQt5.QtGui import QIcon
|
|||||||
from PyQt5.QtWidgets import QMessageBox, QLabel, QWidget, QHBoxLayout
|
from PyQt5.QtWidgets import QMessageBox, QLabel, QWidget, QHBoxLayout
|
||||||
from bauh.api.abstract.view import MessageType
|
from bauh.api.abstract.view import MessageType
|
||||||
|
|
||||||
from bauh.util import resource
|
from bauh.view.util import resource
|
||||||
from bauh.view.qt import css
|
from bauh.view.qt import css
|
||||||
|
|
||||||
MSG_TYPE_MAP = {
|
MSG_TYPE_MAP = {
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ from PyQt5.QtWidgets import QWidget, QLabel, QGridLayout, QPushButton
|
|||||||
|
|
||||||
from bauh import ROOT_DIR
|
from bauh import ROOT_DIR
|
||||||
from bauh.api.abstract.view import MultipleSelectComponent, InputOption
|
from bauh.api.abstract.view import MultipleSelectComponent, InputOption
|
||||||
from bauh.commons import resource
|
from bauh.view.core.config import Configuration, save
|
||||||
from bauh.core.config import Configuration, save
|
from bauh.view.core.controller import GenericSoftwareManager
|
||||||
from bauh.core.controller import GenericSoftwareManager
|
from bauh.view.util import resource
|
||||||
from bauh.view.qt import qt_utils, css
|
from bauh.view.qt import qt_utils, css
|
||||||
from bauh.view.qt.components import MultipleSelectQt, CheckboxQt, new_spacer
|
from bauh.view.qt.components import MultipleSelectQt, CheckboxQt, new_spacer
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ class GemSelectorPanel(QWidget):
|
|||||||
self.manager = manager
|
self.manager = manager
|
||||||
self.config = config
|
self.config = config
|
||||||
self.setLayout(QGridLayout())
|
self.setLayout(QGridLayout())
|
||||||
self.setWindowIcon(QIcon(resource.get_path('img/logo.svg', ROOT_DIR)))
|
self.setWindowIcon(QIcon(resource.get_path('img/logo.svg')))
|
||||||
self.setWindowTitle(i18n['gem_selector.title'])
|
self.setWindowTitle(i18n['gem_selector.title'])
|
||||||
self.resize(400, 400)
|
self.resize(400, 400)
|
||||||
self.show_panel_after_restart = show_panel_after_restart
|
self.show_panel_after_restart = show_panel_after_restart
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ from PyQt5.QtGui import QIcon
|
|||||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \
|
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \
|
||||||
QLineEdit, QLabel, QGridLayout, QPushButton, QPlainTextEdit, QToolBar
|
QLineEdit, QLabel, QGridLayout, QPushButton, QPlainTextEdit, QToolBar
|
||||||
from bauh.api.abstract.cache import MemoryCache
|
from bauh.api.abstract.cache import MemoryCache
|
||||||
|
from bauh.commons.html import strip_html
|
||||||
from bauh.util.html import strip_html
|
|
||||||
|
|
||||||
IGNORED_ATTRS = {'name', '__app__'}
|
IGNORED_ATTRS = {'name', '__app__'}
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,8 @@ import subprocess
|
|||||||
from PyQt5.QtGui import QIcon
|
from PyQt5.QtGui import QIcon
|
||||||
from PyQt5.QtWidgets import QInputDialog, QLineEdit
|
from PyQt5.QtWidgets import QInputDialog, QLineEdit
|
||||||
|
|
||||||
from bauh import ROOT_DIR
|
|
||||||
from bauh.api.abstract.view import MessageType
|
from bauh.api.abstract.view import MessageType
|
||||||
from bauh.commons import resource
|
from bauh.view.util import resource
|
||||||
from bauh.view.qt.dialog import show_message
|
from bauh.view.qt.dialog import show_message
|
||||||
|
|
||||||
|
|
||||||
@@ -20,7 +19,7 @@ def ask_root_password(locale_keys: dict):
|
|||||||
diag = QInputDialog()
|
diag = QInputDialog()
|
||||||
diag.setInputMode(QInputDialog.TextInput)
|
diag.setInputMode(QInputDialog.TextInput)
|
||||||
diag.setTextEchoMode(QLineEdit.Password)
|
diag.setTextEchoMode(QLineEdit.Password)
|
||||||
diag.setWindowIcon(QIcon(resource.get_path('img/lock.svg', ROOT_DIR)))
|
diag.setWindowIcon(QIcon(resource.get_path('img/lock.svg')))
|
||||||
diag.setWindowTitle(locale_keys['popup.root.title'])
|
diag.setWindowTitle(locale_keys['popup.root.title'])
|
||||||
diag.setLabelText(locale_keys['popup.root.password'] + ':')
|
diag.setLabelText(locale_keys['popup.root.password'] + ':')
|
||||||
diag.setCancelButtonText(locale_keys['popup.button.cancel'])
|
diag.setCancelButtonText(locale_keys['popup.button.cancel'])
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ from PyQt5.QtWidgets import QComboBox, QStyleFactory, QWidget, QApplication
|
|||||||
|
|
||||||
from bauh import __app_name__
|
from bauh import __app_name__
|
||||||
from bauh.commons.html import bold
|
from bauh.commons.html import bold
|
||||||
from bauh.core import config
|
from bauh.view.core import config
|
||||||
from bauh.util import util
|
from bauh.view.util import util
|
||||||
from bauh.view.qt import dialog
|
from bauh.view.qt import dialog
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from PyQt5.QtWidgets import QSystemTrayIcon, QMenu
|
|||||||
from bauh import __app_name__
|
from bauh import __app_name__
|
||||||
from bauh.api.abstract.controller import SoftwareManager
|
from bauh.api.abstract.controller import SoftwareManager
|
||||||
from bauh.api.abstract.model import PackageUpdate
|
from bauh.api.abstract.model import PackageUpdate
|
||||||
from bauh.util import util, resource
|
from bauh.view.util import util, resource
|
||||||
from bauh.view.qt.about import AboutDialog
|
from bauh.view.qt.about import AboutDialog
|
||||||
from bauh.view.qt.window import ManageWindow
|
from bauh.view.qt.window import ManageWindow
|
||||||
|
|
||||||
|
|||||||
@@ -6,15 +6,15 @@ from PyQt5.QtCore import QEvent, Qt, QSize, pyqtSignal
|
|||||||
from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QPixmap, QCursor
|
from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QPixmap, QCursor
|
||||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QCheckBox, QHeaderView, QToolBar, \
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QCheckBox, QHeaderView, QToolBar, \
|
||||||
QLabel, QPlainTextEdit, QLineEdit, QProgressBar, QPushButton, QComboBox, QMenu, QAction, QApplication
|
QLabel, QPlainTextEdit, QLineEdit, QProgressBar, QPushButton, QComboBox, QMenu, QAction, QApplication
|
||||||
|
from pip._internal.configuration import Configuration
|
||||||
|
|
||||||
from bauh.api.abstract.cache import MemoryCache
|
from bauh.api.abstract.cache import MemoryCache
|
||||||
from bauh.api.abstract.context import ApplicationContext
|
from bauh.api.abstract.context import ApplicationContext
|
||||||
from bauh.api.abstract.controller import SoftwareManager
|
from bauh.api.abstract.controller import SoftwareManager
|
||||||
from bauh.api.abstract.model import SoftwarePackage, PackageAction
|
from bauh.api.abstract.model import SoftwarePackage, PackageAction
|
||||||
from bauh.api.abstract.view import MessageType
|
from bauh.api.abstract.view import MessageType
|
||||||
from bauh.core.config import Configuration
|
from bauh.view.core.controller import GenericSoftwareManager
|
||||||
from bauh.core.controller import GenericSoftwareManager
|
from bauh.view.util import util, resource
|
||||||
from bauh.util import util, resource
|
|
||||||
from bauh.view.qt import dialog, commons, qt_utils
|
from bauh.view.qt import dialog, commons, qt_utils
|
||||||
from bauh.view.qt.about import AboutDialog
|
from bauh.view.qt.about import AboutDialog
|
||||||
from bauh.view.qt.apps_table import AppsTable, UpdateToggleButton
|
from bauh.view.qt.apps_table import AppsTable, UpdateToggleButton
|
||||||
@@ -242,7 +242,10 @@ class ManageWindow(QWidget):
|
|||||||
self.combo_styles.setStyleSheet('QComboBox {font-size: 12px;}')
|
self.combo_styles.setStyleSheet('QComboBox {font-size: 12px;}')
|
||||||
self.ref_combo_styles = self.toolbar_bottom.addWidget(self.combo_styles)
|
self.ref_combo_styles = self.toolbar_bottom.addWidget(self.combo_styles)
|
||||||
|
|
||||||
bt_settings = IconButton(icon_path=resource.get_path('img/app_settings.svg'), action=self._show_settings_menu, background='#12ABAB')
|
bt_settings = IconButton(icon_path=resource.get_path('img/app_settings.svg'),
|
||||||
|
action=self._show_settings_menu,
|
||||||
|
background='#12ABAB',
|
||||||
|
tooltip=self.i18n['manage_window.bt_settings.tooltip'])
|
||||||
self.ref_bt_settings = self.toolbar_bottom.addWidget(bt_settings)
|
self.ref_bt_settings = self.toolbar_bottom.addWidget(bt_settings)
|
||||||
|
|
||||||
self.layout.addWidget(self.toolbar_bottom)
|
self.layout.addWidget(self.toolbar_bottom)
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 283 B After Width: | Height: | Size: 283 B |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 820 B After Width: | Height: | Size: 820 B |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
@@ -47,6 +47,8 @@ tray.action.manage=Manage applications
|
|||||||
tray.action.exit=Quit
|
tray.action.exit=Quit
|
||||||
tray.action.about=About
|
tray.action.about=About
|
||||||
tray.action.refreshing=Refreshing
|
tray.action.refreshing=Refreshing
|
||||||
|
action.info.tooltip=Click here to see information about this application
|
||||||
|
action.settings.tooltip=Click here to open extra actions
|
||||||
notification.new_updates=Updates
|
notification.new_updates=Updates
|
||||||
notification.update_selected.success=app(s) updated successfully
|
notification.update_selected.success=app(s) updated successfully
|
||||||
notification.update_selected.failed=Update failed
|
notification.update_selected.failed=Update failed
|
||||||
@@ -111,4 +113,5 @@ exit=exit
|
|||||||
manage_window.settings.gems=Application types
|
manage_window.settings.gems=Application types
|
||||||
style=style
|
style=style
|
||||||
style.change.title=Style change
|
style.change.title=Style change
|
||||||
style.change.question=To change the current style is necessary to restart {}. Proceed ?
|
style.change.question=To change the current style is necessary to restart {}. Proceed ?
|
||||||
|
manage_window.bt_settings.tooltip=Click here to open extra actions
|
||||||
@@ -49,6 +49,8 @@ tray.action.manage=Administrar aplicativos
|
|||||||
tray.action.exit=Cerrar
|
tray.action.exit=Cerrar
|
||||||
tray.action.about=Sobre
|
tray.action.about=Sobre
|
||||||
tray.action.refreshing=Recargando
|
tray.action.refreshing=Recargando
|
||||||
|
action.info.tooltip=Haga clic aquí para ver informaciones sobre este aplicativo
|
||||||
|
action.settings.tooltip=Haga clic aquí para abrir acciones adicionales
|
||||||
notification.new_updates=Actualizaciones
|
notification.new_updates=Actualizaciones
|
||||||
notification.update_selected.success=aplicativo(s) actualizado(s) con éxito
|
notification.update_selected.success=aplicativo(s) actualizado(s) con éxito
|
||||||
notification.update_selected.failed=La actualización falló
|
notification.update_selected.failed=La actualización falló
|
||||||
@@ -113,4 +115,5 @@ exit=salir
|
|||||||
manage_window.settings.gems=Tipos de aplicativos
|
manage_window.settings.gems=Tipos de aplicativos
|
||||||
style=estilo
|
style=estilo
|
||||||
style.change.title=Cambio de estilo
|
style.change.title=Cambio de estilo
|
||||||
style.change.question=Para cambiar el estilo actual es necesario reiniciar {}. ¿Proceder?
|
style.change.question=Para cambiar el estilo actual es necesario reiniciar {}. ¿Proceder?
|
||||||
|
manage_window.bt_settings.tooltip=Haga clic aquí para abrir acciones adicionales
|
||||||
@@ -99,6 +99,8 @@ ask.continue=Continuar ?
|
|||||||
cancel=cancelar
|
cancel=cancelar
|
||||||
status.caching_data=Cacheando dados de {} para o disco
|
status.caching_data=Cacheando dados de {} para o disco
|
||||||
action.run.tooltip=Clique aqui para iniciar esse aplicativo
|
action.run.tooltip=Clique aqui para iniciar esse aplicativo
|
||||||
|
action.info.tooltip=Clique aqui para ver informações sobre este aplicativo
|
||||||
|
action.settings.tooltip=Clique aqui para abrir ações adicionais
|
||||||
any=qualquer
|
any=qualquer
|
||||||
manage_window.name_filter.tooltip=Digite aqui para filtrar aplicativos pelo nome
|
manage_window.name_filter.tooltip=Digite aqui para filtrar aplicativos pelo nome
|
||||||
manage_window.name_filter.placeholder=Filtrar por nome
|
manage_window.name_filter.placeholder=Filtrar por nome
|
||||||
@@ -113,4 +115,5 @@ exit=sair
|
|||||||
manage_window.settings.gems=Tipos de aplicativos
|
manage_window.settings.gems=Tipos de aplicativos
|
||||||
style=estilo
|
style=estilo
|
||||||
style.change.title=Mudança de estilo
|
style.change.title=Mudança de estilo
|
||||||
style.change.question=Para alterar o estilo atual é necessário reiniciar o {}. Continuar ?
|
style.change.question=Para alterar o estilo atual é necessário reiniciar o {}. Continuar ?
|
||||||
|
manage_window.bt_settings.tooltip=Clique aqui para abrir ações adicionais
|
||||||
@@ -2,4 +2,4 @@ from bauh import ROOT_DIR
|
|||||||
|
|
||||||
|
|
||||||
def get_path(resource_path):
|
def get_path(resource_path):
|
||||||
return ROOT_DIR + '/resources/' + resource_path
|
return ROOT_DIR + '/view/resources/' + resource_path
|
||||||
@@ -7,7 +7,7 @@ import sys
|
|||||||
from PyQt5.QtCore import QCoreApplication
|
from PyQt5.QtCore import QCoreApplication
|
||||||
|
|
||||||
from bauh import __app_name__
|
from bauh import __app_name__
|
||||||
from bauh.util import resource
|
from bauh.view.util import resource
|
||||||
|
|
||||||
|
|
||||||
def get_locale_keys(key: str = None, locale_dir: str = resource.get_path('locale')):
|
def get_locale_keys(key: str = None, locale_dir: str = resource.get_path('locale')):
|
||||||
2
setup.py
@@ -31,7 +31,7 @@ setup(
|
|||||||
python_requires=">=3.5",
|
python_requires=">=3.5",
|
||||||
url=URL,
|
url=URL,
|
||||||
packages=find_packages(),
|
packages=find_packages(),
|
||||||
package_data={NAME: ["resources/locale/*", "resources/img/*", "gems/*/resources/img/*", "gems/*/resources/locale/*"]},
|
package_data={NAME: ["view/resources/locale/*", "view/resources/img/*", "gems/*/resources/img/*", "gems/*/resources/locale/*"]},
|
||||||
install_requires=requirements,
|
install_requires=requirements,
|
||||||
entry_points={
|
entry_points={
|
||||||
"console_scripts": [
|
"console_scripts": [
|
||||||
|
|||||||