Browse Source

Re-enabled translation support for Qt5

Fixed obsolete source files, regenerated translation sources,
re-enabled translation loading in the programs themselves.
Also removed the completely obsolete block.py file. (It was not used anywhere)

references QubesOS/qubes-issues#5410
Marta Marczykowska-Górecka 4 years ago
parent
commit
245534d886
6 changed files with 1522 additions and 1009 deletions
  1. 18 6
      qubesmanager.pro
  2. 0 160
      qubesmanager/block.py
  3. 956 740
      qubesmanager/i18n/qubesmanager_en.ts
  4. 529 101
      qubesmanager/i18n/qubesmanager_es.ts
  5. 19 1
      qubesmanager/utils.py
  6. 0 1
      rpm_spec/qmgr.spec.in

+ 18 - 6
qubesmanager.pro

@@ -1,44 +1,56 @@
 SOURCES = \
           ui/about.ui \
           ui/backupdlg.ui \
+          ui/bootfromdevice.ui \
+          ui/devicelist.ui \
           ui/globalsettingsdlg.ui \
+          ui/informationnotes.ui \
           ui/logdlg.ui \
-          ui/mainwindow.ui \
           ui/multiselectwidget.ui \
           ui/newappvmdlg.ui \
           ui/newfwruledlg.ui \
+          ui/qubemanager.ui \
           ui/releasenotes.ui \
           ui/restoredlg.ui \
           ui/settingsdlg.ui \
+          ui/templatemanager.ui \
           qubesmanager/about.py \
           qubesmanager/appmenu_select.py \
           qubesmanager/backup.py \
           qubesmanager/backup_utils.py \
-          qubesmanager/block.py \
+          qubesmanager/bootfromdevice.py \
           qubesmanager/clipboard.py \
-          qubesmanager/create_new_vm.py \
           qubesmanager/common_threads.py \
+          qubesmanager/create_new_vm.py \
+          qubesmanager/device_list.py \
           qubesmanager/firewall.py \
           qubesmanager/global_settings.py \
+          qubesmanager/informationnotes.py \
           qubesmanager/log_dialog.py \
-          qubesmanager/main.py \
           qubesmanager/multiselectwidget.py \
+          qubesmanager/qube_manager.py \
           qubesmanager/releasenotes.py \
           qubesmanager/resources_rc.py \
           qubesmanager/restore.py \
           qubesmanager/settings.py \
           qubesmanager/table_widgets.py \
+          qubesmanager/template_manager.py \
           qubesmanager/ui_about.py \
           qubesmanager/ui_backupdlg.py \
+          qubesmanager/ui_bootfromdevice.py \
+          qubesmanager/ui_devicelist.py \
           qubesmanager/ui_globalsettingsdlg.py \
+          qubesmanager/ui_informationnotes.py \
           qubesmanager/ui_logdlg.py \
-          qubesmanager/ui_mainwindow.py \
           qubesmanager/ui_multiselectwidget.py \
           qubesmanager/ui_newappvmdlg.py \
           qubesmanager/ui_newfwruledlg.py \
+          qubesmanager/ui_qubemanager.py \
           qubesmanager/ui_releasenotes.py \
           qubesmanager/ui_restoredlg.py \
-          qubesmanager/ui_settingsdlg.py
+          qubesmanager/ui_settingsdlg.py \
+          qubesmanager/ui_templatemanager.py \
+          qubesmanager/utils.py
 
 TRANSLATIONS = \
                qubesmanager/i18n/qubesmanager_en.ts \

+ 0 - 160
qubesmanager/block.py

@@ -1,160 +0,0 @@
-#!/usr/bin/python2
-# -*- coding: utf8 -*-
-# pylint: skip-file
-#
-# The Qubes OS Project, http://www.qubes-os.org
-#
-# Copyright (C) 2014 Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
-#
-# 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 threading
-import time
-from PyQt4.QtGui import QMessageBox
-from qubes import qubesutils
-
-
-class QubesBlockDevicesManager():
-    def __init__(self, qvm_collection):
-        self.qvm_collection = qvm_collection
-        self.attached_devs = {}
-        self.free_devs = {}
-
-        self.current_blk = {}
-        self.current_attached = {}
-        self.devs_changed = False
-
-        self.last_update_time = time.time()
-        self.blk_state_changed = True
-        self.msg = []
-        self.check_counter = 0
-        self.blk_lock = threading.Lock()
-        self.tray_message_func = None
-
-        self.update()
-
-    def block_devs_event(self, xid):
-        now = time.time()
-        #don't update more often than 1/10 s
-        if now - self.last_update_time >= 0.1:
-            self.last_update_time = now
-
-            self.blk_lock.acquire()
-
-            self.blk_state_changed = True
-
-            self.blk_lock.release()
-
-    def check_for_updates(self):
-        self.blk_lock.acquire()
-
-        ret = (self.blk_state_changed, self.msg)
-
-        if self.blk_state_changed == True:
-            self.check_counter += 1
-
-            self.update()
-            ret = (self.blk_state_changed, self.msg)
-
-            #let the update last for 3 manager-update cycles
-            if self.check_counter == 3:
-                self.check_counter = 0
-                self.blk_state_changed = False
-        self.msg = []
-
-        self.blk_lock.release()
-
-        return ret
-
-    def update(self):
-        blk = qubesutils.block_list(self.qvm_collection)
-        for b in blk:
-            att = qubesutils.block_check_attached(self.qvm_collection, blk[b])
-            if b in self.current_blk:
-                if blk[b] == self.current_blk[b]:
-                    if self.current_attached[b] != att: #devices the same, sth with attaching changed
-                        self.current_attached[b] = att
-                else:   #device changed ?!
-                    self.current_blk[b] = blk[b]
-                    self.current_attached[b] = att
-            else: #new device
-                self.current_blk[b] = blk[b]
-                self.current_attached[b] = att
-                self.msg.append("Attached new device to <b>{}</b>: {}".format(
-                    blk[b]['vm'], blk[b]['device']))
-
-        to_delete = []
-        for b in self.current_blk: #remove devices that are not there anymore
-            if b not in blk:
-                to_delete.append(b)
-                self.msg.append("Detached device from <b>{}</b>: {}".format(
-                    self.current_blk[b]['vm'],
-                    self.current_blk[b]['device']))
-
-        for d in to_delete:
-            del self.current_blk[d]
-            del self.current_attached[d]
-
-        self.__update_blk_entries__()
-
-
-    def __update_blk_entries__(self):
-        self.free_devs.clear()
-        self.attached_devs.clear()
-
-        for b in self.current_attached:
-            if self.current_attached[b]:
-                self.attached_devs[b] = self.__make_entry__(b, self.current_blk[b], self.current_attached[b])
-            else:
-                self.free_devs[b] = self.__make_entry__(b, self.current_blk[b], None)
-
-    def __make_entry__(self, k, dev, att):
-        size_str = qubesutils.bytes_to_kmg(dev['size'])
-        entry = {   'dev': dev['device'],
-                    'dev_obj': dev,
-                    'backend_name': dev['vm'],
-                    'desc': dev['desc'],
-                    'mode': dev['mode'],
-                    'size': size_str,
-                    'attached_to': att, }
-        return entry
-
-    def attach_device(self, vm, dev):
-        mode = self.free_devs[dev]['mode']
-        if self.tray_message_func:
-            self.tray_message_func("{0} - attaching {1}"
-                                                 .format(vm.name, dev), msecs=3000)
-        qubesutils.block_attach(self.qvm_collection, vm,
-                                self.free_devs[dev]['dev_obj'], mode=mode)
-
-    def detach_device(self, vm, dev_name):
-        frontend = self.attached_devs[dev_name]['attached_to']['frontend']
-        vm = self.attached_devs[dev_name]['attached_to']['vm']
-        if self.tray_message_func:
-            self.tray_message_func("{0} - detaching {1}".format(vm.name,
-                                                            dev_name), msecs=3000)
-        qubesutils.block_detach(vm, frontend)
-
-    def check_if_serves_as_backend(self, vm):
-        serves_for = []
-        for d in self.attached_devs:
-            if self.attached_devs[d]['backend_name'] == vm.name:
-                serves_for.append((self.attached_devs[d]['dev'], self.attached_devs[d]['attached_to']['vm']))
-
-        if len(serves_for) > 0:
-            msg = "Qube <b>" + vm.name + "</b> attaches block devices to other qubes: "
-            msg += ', '.join(["<b>"+v.name+"</b>("+d+")" for (d,v) in serves_for ])
-            msg += ".<br><br> Shutting the qube down will dettach the devices from them."
-
-            QMessageBox.warning (None, "Warning!", msg)

File diff suppressed because it is too large
+ 956 - 740
qubesmanager/i18n/qubesmanager_en.ts


File diff suppressed because it is too large
+ 529 - 101
qubesmanager/i18n/qubesmanager_es.ts


+ 19 - 1
qubesmanager/utils.py

@@ -30,7 +30,7 @@ import sys
 import quamash
 from qubesadmin import events
 
-from PyQt5 import QtWidgets  # pylint: disable=import-error
+from PyQt5 import QtWidgets, QtCore  # pylint: disable=import-error
 from PyQt5.QtGui import QIcon  # pylint: disable=import-error
 
 
@@ -264,6 +264,15 @@ def handle_exception(exc_type, exc_value, exc_traceback):
 
 def run_asynchronous(app_name, icon_name, window_class):
     qt_app = QtWidgets.QApplication(sys.argv)
+
+    translator = QtCore.QTranslator(qt_app)
+    locale = QtCore.QLocale.system().name()
+    i18n_dir = os.path.join(
+        os.path.dirname(os.path.realpath(__file__)),
+        'i18n')
+    translator.load("qubesmanager_{!s}.qm".format(locale), i18n_dir)
+    qt_app.installTranslator(translator)
+
     qt_app.setOrganizationName("The Qubes Project")
     qt_app.setOrganizationDomain("http://qubes-os.org")
     qt_app.setApplicationName(app_name)
@@ -292,6 +301,15 @@ def run_asynchronous(app_name, icon_name, window_class):
 
 def run_synchronous(app_name, window_class):
     qt_app = QtWidgets.QApplication(sys.argv)
+
+    translator = QtCore.QTranslator(qt_app)
+    locale = QtCore.QLocale.system().name()
+    i18n_dir = os.path.join(
+        os.path.dirname(os.path.realpath(__file__)),
+        'i18n')
+    translator.load("qubesmanager_{!s}.qm".format(locale), i18n_dir)
+    qt_app.installTranslator(translator)
+
     qt_app.setOrganizationName("The Qubes Project")
     qt_app.setOrganizationDomain("http://qubes-os.org")
     qt_app.setApplicationName(app_name)

+ 0 - 1
rpm_spec/qmgr.spec.in

@@ -90,7 +90,6 @@ rm -rf $RPM_BUILD_ROOT
 %{python3_sitelib}/qubesmanager/__pycache__
 %{python3_sitelib}/qubesmanager/__init__.py
 %{python3_sitelib}/qubesmanager/clipboard.py
-%{python3_sitelib}/qubesmanager/block.py
 %{python3_sitelib}/qubesmanager/table_widgets.py
 %{python3_sitelib}/qubesmanager/appmenu_select.py
 %{python3_sitelib}/qubesmanager/backup.py

Some files were not shown because too many files changed in this diff