def __init__(self, config: dict, screen_size: QSize, logger: logging.Logger, manage_process: Popen = None, settings_process: Popen = None): super(TrayIcon, self).__init__() self.app_config = config self.i18n = generate_i18n(config, resource.get_path('locale/tray')) self.screen_size = screen_size self.manage_process = manage_process self.settings_process = settings_process self.logger = logger self.http_client = HttpClient(logger=logger) if config['ui']['tray']['default_icon']: self.icon_default = QIcon(config['ui']['tray']['default_icon']) else: self.icon_default = QIcon.fromTheme('bauh_tray_default') if self.icon_default.isNull(): self.icon_default = load_resource_icon('img/logo.svg', 24) if config['ui']['tray']['updates_icon']: self.icon_updates = QIcon(config['ui']['tray']['updates_icon']) else: self.icon_updates = QIcon.fromTheme('bauh_tray_updates') if self.icon_updates.isNull(): self.icon_updates = load_resource_icon('img/logo_update.svg', 24) self.setIcon(self.icon_default) self.menu = QMenu() self.action_manage = self.menu.addAction( self.i18n['tray.action.manage']) self.action_manage.triggered.connect(self.show_manage_window) self.action_settings = self.menu.addAction( self.i18n['tray.settings'].capitalize()) self.action_settings.triggered.connect(self.show_settings_window) self.action_about = self.menu.addAction(self.i18n['tray.action.about']) self.action_about.triggered.connect(self.show_about) self.action_exit = self.menu.addAction(self.i18n['tray.action.exit']) self.action_exit.triggered.connect(lambda: QCoreApplication.exit()) self.setContextMenu(self.menu) self.manage_window = None self.dialog_about = None self.settings_window = None self.check_lock = Lock() self.check_thread = UpdateCheck(check_interval=int( config['updates']['check_interval']), check_file=False, lock=self.check_lock, logger=logger) self.check_thread.signal.connect(self.notify_updates) self.check_thread.start() self.recheck_thread = UpdateCheck(check_interval=5, check_file=True, lock=self.check_lock, logger=logger) self.recheck_thread.signal.connect(self.notify_updates) self.recheck_thread.start() self.update_thread = AppUpdateCheck(http_client=self.http_client, logger=self.logger, i18n=self.i18n) self.update_thread.start() self.last_updates = set() self.update_notification = bool(config['system']['notifications']) self.lock_notify = Lock() self.activated.connect(self.handle_click) self.set_default_tooltip()
def __init__(self, app_config: dict): super(AboutDialog, self).__init__() i18n = generate_i18n(app_config, resource.get_path('locale/about')) self.setWindowTitle('{} ({})'.format(i18n['about.title'].capitalize(), __app_name__)) layout = QVBoxLayout() self.setLayout(layout) logo_container = QWidget() logo_container.setObjectName('logo_container') logo_container.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred) logo_container.setLayout(QHBoxLayout()) label_logo = QLabel() label_logo.setObjectName('logo') logo_container.layout().addWidget(label_logo) layout.addWidget(logo_container) label_name = QLabel(__app_name__) label_name.setObjectName('app_name') layout.addWidget(label_name) label_version = QLabel(i18n['about.version'].lower() + ' ' + __version__) label_version.setObjectName('app_version') layout.addWidget(label_version) layout.addWidget(QLabel('')) line_desc = QLabel(i18n['about.info.desc']) line_desc.setObjectName('app_description') layout.addWidget(line_desc) layout.addWidget(QLabel('')) available_gems = [ f for f in glob('{}/gems/*'.format(ROOT_DIR)) if not f.endswith('.py') and not f.endswith('__pycache__') ] available_gems.sort() gems_widget = QWidget() gems_widget.setLayout(QHBoxLayout()) gems_widget.layout().addWidget(QLabel()) gem_logo_size = int(0.032552083 * QApplication.primaryScreen().size().height()) for gem_path in available_gems: icon = QLabel() icon.setObjectName('gem_logo') icon_path = gem_path + '/resources/img/{}.svg'.format( gem_path.split('/')[-1]) icon.setPixmap( QIcon(icon_path).pixmap(gem_logo_size, gem_logo_size)) gems_widget.layout().addWidget(icon) gems_widget.layout().addWidget(QLabel()) layout.addWidget(gems_widget) layout.addWidget(QLabel('')) label_more_info = QLabel() label_more_info.setObjectName('app_more_information') label_more_info.setText(i18n['about.info.link'] + " <a href='{url}'>{url}</a>".format( url=PROJECT_URL)) label_more_info.setOpenExternalLinks(True) layout.addWidget(label_more_info) label_license = QLabel() label_license.setObjectName('app_license') label_license.setText("<a href='{}'>{}</a>".format( LICENSE_URL, i18n['about.info.license'])) label_license.setOpenExternalLinks(True) layout.addWidget(label_license) layout.addWidget(QLabel('')) label_trouble_question = QLabel(i18n['about.info.trouble.question']) label_trouble_question.setObjectName('app_trouble_question') layout.addWidget(label_trouble_question) label_trouble_answer = QLabel(i18n['about.info.trouble.answer']) label_trouble_answer.setObjectName('app_trouble_answer') layout.addWidget(label_trouble_answer) layout.addWidget(QLabel('')) label_rate_question = QLabel(i18n['about.info.rate.question']) label_rate_question.setObjectName('app_rate_question') layout.addWidget(label_rate_question) label_rate_answer = QLabel(i18n['about.info.rate.answer']) label_rate_answer.setObjectName('app_rate_answer') layout.addWidget(label_rate_answer) layout.addWidget(QLabel('')) self.adjustSize() self.setFixedSize(self.size())
def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logger) -> Tuple[QApplication, QWidget]: i18n = generate_i18n(app_config, resource.get_path('locale')) cache_cleaner = CacheCleaner() cache_factory = DefaultMemoryCacheFactory(expiration_time=int(app_config['memory_cache']['data_expiration']), cleaner=cache_cleaner) icon_cache = cache_factory.new(int(app_config['memory_cache']['icon_expiration'])) http_client = HttpClient(logger) downloader = AdaptableFileDownloader(logger=logger, multithread_enabled=app_config['download']['multithreaded'], multithread_client=app_config['download']['multithreaded_client'], i18n=i18n, http_client=http_client, check_ssl=app_config['download']['check_ssl']) context = ApplicationContext(i18n=i18n, http_client=http_client, download_icons=bool(app_config['download']['icons']), app_root_dir=ROOT_DIR, cache_factory=cache_factory, disk_loader_factory=DefaultDiskCacheLoaderFactory(logger), logger=logger, distro=util.get_distro(), file_downloader=downloader, app_name=__app_name__, app_version=__version__, internet_checker=InternetChecker(offline=app_args.offline), suggestions_mapping=read_suggestions_mapping(), root_user=user.is_root()) managers = gems.load_managers(context=context, locale=i18n.current_key, config=app_config, default_locale=DEFAULT_I18N_KEY, logger=logger) if app_args.reset: util.clean_app_files(managers) exit(0) force_suggestions = bool(app_args.suggestions) manager = GenericSoftwareManager(managers, context=context, config=app_config, force_suggestions=force_suggestions) app = new_qt_application(app_config=app_config, logger=logger, quit_on_last_closed=True) screen_size = app.primaryScreen().size() context.screen_width, context.screen_height = screen_size.width(), screen_size.height() logger.info(f"Screen: {screen_size.width()} x {screen_size.height()} " f"(DPI: {int(app.primaryScreen().logicalDotsPerInch())})") if app_args.settings: # only settings window manager.cache_available_managers() return app, SettingsWindow(manager=manager, i18n=i18n, window=None) else: manage_window = ManageWindow(i18n=i18n, manager=manager, icon_cache=icon_cache, screen_size=screen_size, config=app_config, context=context, http_client=http_client, icon=util.get_default_icon()[1], force_suggestions=force_suggestions, logger=logger) prepare = PreparePanel(screen_size=screen_size, context=context, manager=manager, i18n=i18n, manage_window=manage_window, app_config=app_config, force_suggestions=force_suggestions) cache_cleaner.start() return app, prepare
def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logger) -> Tuple[QApplication, QWidget]: i18n = generate_i18n(app_config, resource.get_path('locale')) cache_cleaner = CacheCleaner() cache_factory = DefaultMemoryCacheFactory(expiration_time=int( app_config['memory_cache']['data_expiration']), cleaner=cache_cleaner) icon_cache = cache_factory.new( int(app_config['memory_cache']['icon_expiration'])) http_client = HttpClient(logger) context = ApplicationContext( i18n=i18n, http_client=http_client, download_icons=bool(app_config['download']['icons']), app_root_dir=ROOT_DIR, cache_factory=cache_factory, disk_loader_factory=DefaultDiskCacheLoaderFactory(logger), logger=logger, distro=util.get_distro(), file_downloader=AdaptableFileDownloader( logger, bool(app_config['download']['multithreaded']), i18n, http_client, app_config['download']['multithreaded_client']), app_name=__app_name__) managers = gems.load_managers(context=context, locale=i18n.current_key, config=app_config, default_locale=DEFAULT_I18N_KEY) if app_args.reset: util.clean_app_files(managers) exit(0) manager = GenericSoftwareManager(managers, context=context, config=app_config) app = new_qt_application(app_config, quit_on_last_closed=True) if app_args.settings: # only settings window manager.cache_available_managers() return app, SettingsWindow(manager=manager, i18n=i18n, screen_size=app.primaryScreen().size(), window=None) else: manage_window = ManageWindow(i18n=i18n, manager=manager, icon_cache=icon_cache, screen_size=app.primaryScreen().size(), config=app_config, context=context, http_client=http_client, icon=util.get_default_icon()[1], logger=logger) prepare = PreparePanel(screen_size=app.primaryScreen().size(), context=context, manager=manager, i18n=i18n, manage_window=manage_window) cache_cleaner.start() return app, prepare