manager/qubesmanager/appmenu_select.py
Marta Marczykowska-Górecka e79724f9db
Update Qt version used in qubesmanager to Qt5
Fixed dependencies, places where obsolete functions stopped working,
code fragments that started throwing warnings and an .ui file that
stopped being readable after the update.
2019-05-30 21:33:49 +02:00

90 lines
3.1 KiB
Python
Executable File

#!/usr/bin/python2
#
# The Qubes OS Project, http://www.qubes-os.org
#
# Copyright (C) 2011 Marek Marczykowski <marmarek@mimuw.edu.pl>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with this program; if not, see <http://www.gnu.org/licenses/>.
#
#
import subprocess
import PyQt5.QtWidgets # pylint: disable=import-error
# TODO description in tooltip
# TODO icon
# pylint: disable=too-few-public-methods
class AppListWidgetItem(PyQt5.QtWidgets.QListWidgetItem):
def __init__(self, name, ident, parent=None):
super(AppListWidgetItem, self).__init__(name, parent)
# self.setToolTip(command)
self.ident = ident
@classmethod
def from_line(cls, line):
ident, _icon_name, name = line.strip().split(maxsplit=2)
return cls(name=name, ident=ident)
class AppmenuSelectManager:
def __init__(self, vm, apps_multiselect):
self.vm = vm
self.app_list = apps_multiselect # this is a multiselect wiget
self.whitelisted = None
self.fill_apps_list()
def fill_apps_list(self):
self.whitelisted = [line for line in subprocess.check_output(
['qvm-appmenus', '--get-whitelist', self.vm.name]
).decode().strip().split('\n') if line]
# Check if appmenu entry is really installed
# whitelisted = [a for a in whitelisted
# if os.path.exists('%s/apps/%s-%s' %
# (self.vm.dir_path, self.vm.name, a))]
self.app_list.clear()
available_appmenus = [AppListWidgetItem.from_line(line)
for line in subprocess.check_output(
['qvm-appmenus',
'--get-available', '--i-understand-format-is-unstable',
self.vm.name]).decode().splitlines()]
for app in available_appmenus:
if app.ident in self.whitelisted:
self.app_list.selected_list.addItem(app)
else:
self.app_list.available_list.addItem(app)
self.app_list.available_list.sortItems()
self.app_list.selected_list.sortItems()
def save_appmenu_select_changes(self):
new_whitelisted = [self.app_list.selected_list.item(i).ident
for i in range(self.app_list.selected_list.count())]
if set(new_whitelisted) == set(self.whitelisted):
return False
p = subprocess.Popen([
'qvm-appmenus', '--set-whitelist', '-', '--update', self.vm.name],
stdin=subprocess.PIPE)
p.communicate('\n'.join(new_whitelisted).encode())
if p.returncode != 0:
raise RuntimeError('qvm-appmenus --set-whitelist failed')
return True