Fixed imports
Fixed import * and unused imports.
This commit is contained in:
parent
7a4e4b35d5
commit
9d73ceb99d
@ -30,21 +30,23 @@ from qubesadmin import Qubes, events, exc
|
|||||||
from qubesadmin import utils as admin_utils
|
from qubesadmin import utils as admin_utils
|
||||||
from qubes.storage.file import get_disk_usage
|
from qubes.storage.file import get_disk_usage
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui # pylint: disable=import-error
|
from PyQt4 import QtCore # pylint: disable=import-error
|
||||||
|
from PyQt4 import QtGui # pylint: disable=import-error
|
||||||
|
from . import ui_backupdlg
|
||||||
|
from . import multiselectwidget
|
||||||
|
|
||||||
from .ui_backupdlg import *
|
from . import backup_utils
|
||||||
from .multiselectwidget import *
|
|
||||||
|
|
||||||
from .backup_utils import *
|
|
||||||
from . import utils
|
from . import utils
|
||||||
import grp
|
import grp
|
||||||
import pwd
|
import pwd
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
from .thread_monitor import *
|
from . import thread_monitor
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
class BackupVMsWindow(Ui_Backup, QWizard):
|
|
||||||
|
class BackupVMsWindow(ui_backupdlg.Ui_Backup, multiselectwidget.QtGui.QWizard):
|
||||||
|
|
||||||
__pyqtSignals__ = ("backup_progress(int)",)
|
__pyqtSignals__ = ("backup_progress(int)",)
|
||||||
|
|
||||||
@ -67,21 +69,21 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
self.progress_status.text = self.tr("Backup in progress...")
|
self.progress_status.text = self.tr("Backup in progress...")
|
||||||
self.dir_line_edit.setReadOnly(False)
|
self.dir_line_edit.setReadOnly(False)
|
||||||
|
|
||||||
self.select_vms_widget = MultiSelectWidget(self)
|
self.select_vms_widget = multiselectwidget.MultiSelectWidget(self)
|
||||||
self.verticalLayout.insertWidget(1, self.select_vms_widget)
|
self.verticalLayout.insertWidget(1, self.select_vms_widget)
|
||||||
|
|
||||||
self.connect(self, SIGNAL("currentIdChanged(int)"),
|
self.connect(self, QtCore.SIGNAL("currentIdChanged(int)"),
|
||||||
self.current_page_changed)
|
self.current_page_changed)
|
||||||
self.connect(self.select_vms_widget,
|
self.connect(self.select_vms_widget,
|
||||||
SIGNAL("items_removed(PyQt_PyObject)"),
|
QtCore.SIGNAL("items_removed(PyQt_PyObject)"),
|
||||||
self.vms_removed)
|
self.vms_removed)
|
||||||
self.connect(self.select_vms_widget,
|
self.connect(self.select_vms_widget,
|
||||||
SIGNAL("items_added(PyQt_PyObject)"),
|
QtCore.SIGNAL("items_added(PyQt_PyObject)"),
|
||||||
self.vms_added)
|
self.vms_added)
|
||||||
self.connect(self, SIGNAL("backup_progress(int)"),
|
self.connect(self, QtCore.SIGNAL("backup_progress(int)"),
|
||||||
self.progress_bar.setValue)
|
self.progress_bar.setValue)
|
||||||
self.dir_line_edit.connect(self.dir_line_edit,
|
self.dir_line_edit.connect(self.dir_line_edit,
|
||||||
SIGNAL("textChanged(QString)"),
|
QtCore.SIGNAL("textChanged(QString)"),
|
||||||
self.backup_location_changed)
|
self.backup_location_changed)
|
||||||
|
|
||||||
self.select_vms_page.isComplete = self.has_selected_vms
|
self.select_vms_page.isComplete = self.has_selected_vms
|
||||||
@ -90,15 +92,15 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
# this causes to run isComplete() twice, I don't know why
|
# this causes to run isComplete() twice, I don't know why
|
||||||
self.select_vms_page.connect(
|
self.select_vms_page.connect(
|
||||||
self.select_vms_widget,
|
self.select_vms_widget,
|
||||||
SIGNAL("selected_changed()"),
|
QtCore.SIGNAL("selected_changed()"),
|
||||||
SIGNAL("completeChanged()"))
|
QtCore.SIGNAL("completeChanged()"))
|
||||||
self.passphrase_line_edit.connect(
|
self.passphrase_line_edit.connect(
|
||||||
self.passphrase_line_edit,
|
self.passphrase_line_edit,
|
||||||
SIGNAL("textChanged(QString)"),
|
QtCore.SIGNAL("textChanged(QString)"),
|
||||||
self.backup_location_changed)
|
self.backup_location_changed)
|
||||||
self.passphrase_line_edit_verify.connect(
|
self.passphrase_line_edit_verify.connect(
|
||||||
self.passphrase_line_edit_verify,
|
self.passphrase_line_edit_verify,
|
||||||
SIGNAL("textChanged(QString)"),
|
QtCore.SIGNAL("textChanged(QString)"),
|
||||||
self.backup_location_changed)
|
self.backup_location_changed)
|
||||||
|
|
||||||
self.total_size = 0
|
self.total_size = 0
|
||||||
@ -123,7 +125,7 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
|
|
||||||
def load_settings(self):
|
def load_settings(self):
|
||||||
try:
|
try:
|
||||||
profile_data = load_backup_profile()
|
profile_data = backup_utils.load_backup_profile()
|
||||||
except Exception as ex: # TODO: fix just for file not found
|
except Exception as ex: # TODO: fix just for file not found
|
||||||
return
|
return
|
||||||
if not profile_data:
|
if not profile_data:
|
||||||
@ -157,9 +159,9 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
'include': [vm.name for vm in self.selected_vms],
|
'include': [vm.name for vm in self.selected_vms],
|
||||||
'passphrase_text': self.passphrase_line_edit.text()}
|
'passphrase_text': self.passphrase_line_edit.text()}
|
||||||
# TODO: add compression when it is added
|
# TODO: add compression when it is added
|
||||||
write_backup_profile(settings)
|
backup_utils.write_backup_profile(settings)
|
||||||
|
|
||||||
class VmListItem(QListWidgetItem):
|
class VmListItem(QtGui.QListWidgetItem):
|
||||||
def __init__(self, vm):
|
def __init__(self, vm):
|
||||||
self.vm = vm
|
self.vm = vm
|
||||||
if vm.qid == 0:
|
if vm.qid == 0:
|
||||||
@ -205,9 +207,9 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
self.total_size_label.setText(
|
self.total_size_label.setText(
|
||||||
admin_utils.size_to_human(self.total_size))
|
admin_utils.size_to_human(self.total_size))
|
||||||
|
|
||||||
@pyqtSlot(name='on_select_path_button_clicked')
|
@QtCore.pyqtSlot(name='on_select_path_button_clicked')
|
||||||
def select_path_button_clicked(self):
|
def select_path_button_clicked(self):
|
||||||
select_path_button_clicked(self)
|
backup_utils.select_path_button_clicked(self)
|
||||||
|
|
||||||
def validateCurrentPage(self):
|
def validateCurrentPage(self):
|
||||||
if self.currentPage() is self.select_vms_page:
|
if self.currentPage() is self.select_vms_page:
|
||||||
@ -220,26 +222,26 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
elif self.currentPage() is self.select_dir_page:
|
elif self.currentPage() is self.select_dir_page:
|
||||||
backup_location = str(self.dir_line_edit.text())
|
backup_location = str(self.dir_line_edit.text())
|
||||||
if not backup_location:
|
if not backup_location:
|
||||||
QMessageBox.information(
|
QtGui.QMessageBox.information(
|
||||||
None, self.tr("Wait!"),
|
None, self.tr("Wait!"),
|
||||||
self.tr("Enter backup target location first."))
|
self.tr("Enter backup target location first."))
|
||||||
return False
|
return False
|
||||||
if self.appvm_combobox.currentIndex() == 0 \
|
if self.appvm_combobox.currentIndex() == 0 \
|
||||||
and not os.path.isdir(backup_location):
|
and not os.path.isdir(backup_location):
|
||||||
QMessageBox.information(
|
QtGui.QMessageBox.information(
|
||||||
None, self.tr("Wait!"),
|
None, self.tr("Wait!"),
|
||||||
self.tr("Selected directory do not exists or "
|
self.tr("Selected directory do not exists or "
|
||||||
"not a directory (%s).") % backup_location)
|
"not a directory (%s).") % backup_location)
|
||||||
return False
|
return False
|
||||||
if not len(self.passphrase_line_edit.text()):
|
if not len(self.passphrase_line_edit.text()):
|
||||||
QMessageBox.information(
|
QtGui.QMessageBox.information(
|
||||||
None, self.tr("Wait!"),
|
None, self.tr("Wait!"),
|
||||||
self.tr("Enter passphrase for backup "
|
self.tr("Enter passphrase for backup "
|
||||||
"encryption/verification first."))
|
"encryption/verification first."))
|
||||||
return False
|
return False
|
||||||
if self.passphrase_line_edit.text() !=\
|
if self.passphrase_line_edit.text() !=\
|
||||||
self.passphrase_line_edit_verify.text():
|
self.passphrase_line_edit_verify.text():
|
||||||
QMessageBox.information(
|
QtGui.QMessageBox.information(
|
||||||
None, self.tr("Wait!"),
|
None, self.tr("Wait!"),
|
||||||
self.tr("Enter the same passphrase in both fields."))
|
self.tr("Enter the same passphrase in both fields."))
|
||||||
return False
|
return False
|
||||||
@ -250,7 +252,7 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
# self.func_output.append(s)
|
# self.func_output.append(s)
|
||||||
|
|
||||||
def update_progress_bar(self, value):
|
def update_progress_bar(self, value):
|
||||||
self.emit(SIGNAL("backup_progress(int)"), value)
|
self.emit(QtCore.SIGNAL("backup_progress(int)"), value)
|
||||||
|
|
||||||
def __do_backup__(self, thread_monitor):
|
def __do_backup__(self, thread_monitor):
|
||||||
msg = []
|
msg = []
|
||||||
@ -301,9 +303,10 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
self.showFileDialog.setChecked(self.showFileDialog.isEnabled()
|
self.showFileDialog.setChecked(self.showFileDialog.isEnabled()
|
||||||
and str(self.dir_line_edit.text())
|
and str(self.dir_line_edit.text())
|
||||||
.count("media/") > 0)
|
.count("media/") > 0)
|
||||||
self.thread_monitor = ThreadMonitor()
|
self.thread_monitor = thread_monitor.ThreadMonitor()
|
||||||
thread = threading.Thread(target=self.__do_backup__,
|
thread = threading.Thread(
|
||||||
args=(self.thread_monitor,))
|
target=self.__do_backup__,
|
||||||
|
args=(self.thread_monitor,))
|
||||||
thread.daemon = True
|
thread.daemon = True
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
@ -315,17 +318,17 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
if self.canceled:
|
if self.canceled:
|
||||||
self.progress_status.setText(self.tr("Backup aborted."))
|
self.progress_status.setText(self.tr("Backup aborted."))
|
||||||
if self.tmpdir_to_remove:
|
if self.tmpdir_to_remove:
|
||||||
if QMessageBox.warning(
|
if QtGui.QMessageBox.warning(
|
||||||
None, self.tr("Backup aborted"),
|
None, self.tr("Backup aborted"),
|
||||||
self.tr(
|
self.tr(
|
||||||
"Do you want to remove temporary files "
|
"Do you want to remove temporary files "
|
||||||
"from %s?") % self.tmpdir_to_remove,
|
"from %s?") % self.tmpdir_to_remove,
|
||||||
QMessageBox.Yes, QMessageBox.No) == \
|
QtGui.QMessageBox.Yes,
|
||||||
QMessageBox.Yes:
|
QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes:
|
||||||
shutil.rmtree(self.tmpdir_to_remove)
|
shutil.rmtree(self.tmpdir_to_remove)
|
||||||
else:
|
else:
|
||||||
self.progress_status.setText(self.tr("Backup error."))
|
self.progress_status.setText(self.tr("Backup error."))
|
||||||
QMessageBox.warning(
|
QtGui.QMessageBox.warning(
|
||||||
self, self.tr("Backup error!"),
|
self, self.tr("Backup error!"),
|
||||||
self.tr("ERROR: {}").format(
|
self.tr("ERROR: {}").format(
|
||||||
self.thread_monitor.error_msg))
|
self.thread_monitor.error_msg))
|
||||||
@ -368,7 +371,7 @@ class BackupVMsWindow(Ui_Backup, QWizard):
|
|||||||
return len(self.dir_line_edit.text()) > 0
|
return len(self.dir_line_edit.text()) > 0
|
||||||
|
|
||||||
def backup_location_changed(self, new_dir=None):
|
def backup_location_changed(self, new_dir=None):
|
||||||
self.select_dir_page.emit(SIGNAL("completeChanged()"))
|
self.select_dir_page.emit(QtCore.SIGNAL("completeChanged()"))
|
||||||
|
|
||||||
|
|
||||||
# Bases on the original code by:
|
# Bases on the original code by:
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
import re
|
import re
|
||||||
from PyQt4.QtCore import *
|
from PyQt4 import QtGui
|
||||||
from PyQt4.QtGui import *
|
from PyQt4 import QtCore
|
||||||
|
|
||||||
import subprocess
|
import subprocess
|
||||||
from . import utils
|
from . import utils
|
||||||
@ -63,7 +63,7 @@ def enable_dir_line_edit(dialog, boolean):
|
|||||||
|
|
||||||
def select_path_button_clicked(dialog, select_file=False):
|
def select_path_button_clicked(dialog, select_file=False):
|
||||||
backup_location = str(dialog.dir_line_edit.text())
|
backup_location = str(dialog.dir_line_edit.text())
|
||||||
file_dialog = QFileDialog()
|
file_dialog = QtGui.QFileDialog()
|
||||||
file_dialog.setReadOnly(True)
|
file_dialog.setReadOnly(True)
|
||||||
|
|
||||||
new_path = None
|
new_path = None
|
||||||
@ -77,7 +77,7 @@ def select_path_button_clicked(dialog, select_file=False):
|
|||||||
"qubes.SelectFile" if select_file
|
"qubes.SelectFile" if select_file
|
||||||
else "qubes.SelectDirectory")
|
else "qubes.SelectDirectory")
|
||||||
except subprocess.CalledProcessError as ex:
|
except subprocess.CalledProcessError as ex:
|
||||||
QMessageBox.warning(
|
QtGui.QMessageBox.warning(
|
||||||
None,
|
None,
|
||||||
dialog.tr("Nothing selected!"),
|
dialog.tr("Nothing selected!"),
|
||||||
dialog.tr("No file or directory selected."))
|
dialog.tr("No file or directory selected."))
|
||||||
@ -87,7 +87,7 @@ def select_path_button_clicked(dialog, select_file=False):
|
|||||||
dialog.dir_line_edit.setText(new_path)
|
dialog.dir_line_edit.setText(new_path)
|
||||||
|
|
||||||
if new_path and len(backup_location) > 0:
|
if new_path and len(backup_location) > 0:
|
||||||
dialog.select_dir_page.emit(SIGNAL("completeChanged()"))
|
dialog.select_dir_page.emit(QtCore.SIGNAL("completeChanged()"))
|
||||||
|
|
||||||
|
|
||||||
def load_backup_profile():
|
def load_backup_profile():
|
||||||
|
@ -24,30 +24,29 @@
|
|||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
from PyQt4.QtCore import *
|
from PyQt4 import QtCore
|
||||||
from PyQt4.QtGui import *
|
from PyQt4 import QtGui
|
||||||
from .thread_monitor import *
|
from . import thread_monitor
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
import os.path
|
import os.path
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
import qubesmanager.resources_rc
|
|
||||||
import signal
|
import signal
|
||||||
|
|
||||||
from qubes import backup
|
from qubes import backup
|
||||||
|
|
||||||
from .ui_restoredlg import *
|
from . import ui_restoredlg
|
||||||
from .multiselectwidget import *
|
from . import multiselectwidget
|
||||||
|
|
||||||
from .backup_utils import *
|
from . import backup_utils
|
||||||
from multiprocessing import Queue, Event
|
from multiprocessing import Queue, Event
|
||||||
from multiprocessing.queues import Empty
|
from multiprocessing.queues import Empty
|
||||||
from qubesadmin import Qubes, events, exc
|
from qubesadmin import Qubes, exc
|
||||||
from qubesadmin import utils as admin_utils
|
|
||||||
from qubesadmin.backup import restore
|
from qubesadmin.backup import restore
|
||||||
|
|
||||||
|
|
||||||
class RestoreVMsWindow(Ui_Restore, QWizard):
|
class RestoreVMsWindow(ui_restoredlg.Ui_Restore, QtGui.QWizard):
|
||||||
|
|
||||||
__pyqtSignals__ = ("restore_progress(int)", "backup_progress(int)")
|
__pyqtSignals__ = ("restore_progress(int)", "backup_progress(int)")
|
||||||
|
|
||||||
@ -69,20 +68,20 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
|
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
self.select_vms_widget = MultiSelectWidget(self)
|
self.select_vms_widget = multiselectwidget.MultiSelectWidget(self)
|
||||||
self.select_vms_layout.insertWidget(1, self.select_vms_widget)
|
self.select_vms_layout.insertWidget(1, self.select_vms_widget)
|
||||||
|
|
||||||
self.connect(self,
|
self.connect(self,
|
||||||
SIGNAL("currentIdChanged(int)"), self.current_page_changed)
|
QtCore.SIGNAL("currentIdChanged(int)"), self.current_page_changed)
|
||||||
self.connect(self,
|
self.connect(self,
|
||||||
SIGNAL("restore_progress(QString)"),
|
QtCore.SIGNAL("restore_progress(QString)"),
|
||||||
self.commit_text_edit.append)
|
self.commit_text_edit.append)
|
||||||
self.connect(self,
|
self.connect(self,
|
||||||
SIGNAL("backup_progress(int)"), self.progress_bar.setValue)
|
QtCore.SIGNAL("backup_progress(int)"), self.progress_bar.setValue)
|
||||||
self.dir_line_edit.connect(self.dir_line_edit,
|
self.dir_line_edit.connect(self.dir_line_edit,
|
||||||
SIGNAL("textChanged(QString)"),
|
QtCore.SIGNAL("textChanged(QString)"),
|
||||||
self.backup_location_changed)
|
self.backup_location_changed)
|
||||||
self.connect(self.verify_only, SIGNAL("stateChanged(int)"),
|
self.connect(self.verify_only, QtCore.SIGNAL("stateChanged(int)"),
|
||||||
self.on_verify_only_toogled)
|
self.on_verify_only_toogled)
|
||||||
|
|
||||||
self.select_dir_page.isComplete = self.has_selected_dir
|
self.select_dir_page.isComplete = self.has_selected_dir
|
||||||
@ -92,15 +91,15 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
# this causes to run isComplete() twice, I don't know why
|
# this causes to run isComplete() twice, I don't know why
|
||||||
self.select_vms_page.connect(
|
self.select_vms_page.connect(
|
||||||
self.select_vms_widget,
|
self.select_vms_widget,
|
||||||
SIGNAL("selected_changed()"),
|
QtCore.SIGNAL("selected_changed()"),
|
||||||
SIGNAL("completeChanged()"))
|
QtCore.SIGNAL("completeChanged()"))
|
||||||
|
|
||||||
fill_appvms_list(self)
|
backup_utils.fill_appvms_list(self)
|
||||||
# self.__init_restore_options__()
|
# self.__init_restore_options__()
|
||||||
|
|
||||||
@pyqtSlot(name='on_select_path_button_clicked')
|
@QtCore.pyqtSlot(name='on_select_path_button_clicked')
|
||||||
def select_path_button_clicked(self):
|
def select_path_button_clicked(self):
|
||||||
select_path_button_clicked(self, True)
|
backup_utils.select_path_button_clicked(self, True)
|
||||||
|
|
||||||
def on_ignore_missing_toggled(self, checked):
|
def on_ignore_missing_toggled(self, checked):
|
||||||
self.restore_options['use-default-template'] = checked
|
self.restore_options['use-default-template'] = checked
|
||||||
@ -158,22 +157,22 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
continue
|
continue
|
||||||
self.select_vms_widget.available_list.addItem(vmname)
|
self.select_vms_widget.available_list.addItem(vmname)
|
||||||
except exc.QubesException as ex:
|
except exc.QubesException as ex:
|
||||||
QMessageBox.warning(None, self.tr("Restore error!"), str(ex))
|
QtGui.QMessageBox.warning(None, self.tr("Restore error!"), str(ex))
|
||||||
|
|
||||||
def gather_output(self, s):
|
def gather_output(self, s):
|
||||||
self.func_output.append(s)
|
self.func_output.append(s)
|
||||||
|
|
||||||
def restore_error_output(self, s):
|
def restore_error_output(self, s):
|
||||||
self.error_detected.set()
|
self.error_detected.set()
|
||||||
self.feedback_queue.put((SIGNAL("restore_progress(QString)"),
|
self.feedback_queue.put((QtCore.SIGNAL("restore_progress(QString)"),
|
||||||
u'<font color="red">{0}</font>'.format(s)))
|
u'<font color="red">{0}</font>'.format(s)))
|
||||||
|
|
||||||
def restore_output(self, s):
|
def restore_output(self, s):
|
||||||
self.feedback_queue.put((SIGNAL("restore_progress(QString)"),
|
self.feedback_queue.put((QtCore.SIGNAL("restore_progress(QString)"),
|
||||||
u'<font color="black">{0}</font>'.format(s)))
|
u'<font color="black">{0}</font>'.format(s)))
|
||||||
|
|
||||||
def update_progress_bar(self, value):
|
def update_progress_bar(self, value):
|
||||||
self.feedback_queue.put((SIGNAL("backup_progress(int)"), value))
|
self.feedback_queue.put((QtCore.SIGNAL("backup_progress(int)"), value))
|
||||||
|
|
||||||
def __do_restore__(self, thread_monitor):
|
def __do_restore__(self, thread_monitor):
|
||||||
err_msg = []
|
err_msg = []
|
||||||
@ -192,17 +191,17 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
"investigate them and/or clean them up"))
|
"investigate them and/or clean them up"))
|
||||||
|
|
||||||
if self.canceled:
|
if self.canceled:
|
||||||
self.emit(SIGNAL("restore_progress(QString)"),
|
self.emit(QtCore.SIGNAL("restore_progress(QString)"),
|
||||||
'<b><font color="red">{0}</font></b>'
|
'<b><font color="red">{0}</font></b>'
|
||||||
.format(self.tr("Restore aborted!")))
|
.format(self.tr("Restore aborted!")))
|
||||||
elif len(err_msg) > 0 or self.error_detected.is_set():
|
elif len(err_msg) > 0 or self.error_detected.is_set():
|
||||||
if len(err_msg) > 0:
|
if len(err_msg) > 0:
|
||||||
thread_monitor.set_error_msg('\n'.join(err_msg))
|
thread_monitor.set_error_msg('\n'.join(err_msg))
|
||||||
self.emit(SIGNAL("restore_progress(QString)"),
|
self.emit(QtCore.SIGNAL("restore_progress(QString)"),
|
||||||
'<b><font color="red">{0}</font></b>'
|
'<b><font color="red">{0}</font></b>'
|
||||||
.format(self.tr("Finished with errors!")))
|
.format(self.tr("Finished with errors!")))
|
||||||
else:
|
else:
|
||||||
self.emit(SIGNAL("restore_progress(QString)"),
|
self.emit(QtCore.SIGNAL("restore_progress(QString)"),
|
||||||
'<font color="green">{0}</font>'
|
'<font color="green">{0}</font>'
|
||||||
.format(self.tr("Finished successfully!")))
|
.format(self.tr("Finished successfully!")))
|
||||||
|
|
||||||
@ -234,7 +233,7 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
self.confirm_text_edit.setFontFamily("Monospace")
|
self.confirm_text_edit.setFontFamily("Monospace")
|
||||||
self.confirm_text_edit.setText(self.func_output)
|
self.confirm_text_edit.setText(self.func_output)
|
||||||
|
|
||||||
self.confirm_page.emit(SIGNAL("completeChanged()"))
|
self.confirm_page.emit(QtCore.SIGNAL("completeChanged()"))
|
||||||
|
|
||||||
elif self.currentPage() is self.commit_page:
|
elif self.currentPage() is self.commit_page:
|
||||||
self.button(self.FinishButton).setDisabled(True)
|
self.button(self.FinishButton).setDisabled(True)
|
||||||
@ -243,8 +242,8 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
and str(self.dir_line_edit.text())
|
and str(self.dir_line_edit.text())
|
||||||
.count("media/") > 0)
|
.count("media/") > 0)
|
||||||
|
|
||||||
self.thread_monitor = ThreadMonitor()
|
self.thread_monitor = thread_monitor.ThreadMonitor()
|
||||||
thread = threading.Thread (target= self.__do_restore__ , args=(self.thread_monitor,))
|
thread = threading.Thread (target= self.__do_restore__, args=(self.thread_monitor,))
|
||||||
thread.daemon = True
|
thread.daemon = True
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
@ -260,19 +259,23 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
if not self.thread_monitor.success:
|
if not self.thread_monitor.success:
|
||||||
if self.canceled:
|
if self.canceled:
|
||||||
if self.tmpdir_to_remove and \
|
if self.tmpdir_to_remove and \
|
||||||
QMessageBox.warning(None, self.tr("Restore aborted"),
|
QtGui.QMessageBox.warning(
|
||||||
|
None,
|
||||||
|
self.tr("Restore aborted"),
|
||||||
self.tr("Do you want to remove temporary files "
|
self.tr("Do you want to remove temporary files "
|
||||||
"from %s?") % self.tmpdir_to_remove,
|
"from %s?") % self.tmpdir_to_remove,
|
||||||
QMessageBox.Yes, QMessageBox.No) == \
|
QtGui.QMessageBox.Yes,
|
||||||
QMessageBox.Yes:
|
QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes:
|
||||||
shutil.rmtree(self.tmpdir_to_remove)
|
shutil.rmtree(self.tmpdir_to_remove)
|
||||||
else:
|
else:
|
||||||
QMessageBox.warning(None,
|
QtGui.QMessageBox.warning(
|
||||||
self.tr("Backup error!"), self.tr("ERROR: {0}")
|
None,
|
||||||
.format(self.thread_monitor.error_msg))
|
self.tr("Backup error!"),
|
||||||
|
self.tr("ERROR: {0}").format(
|
||||||
|
self.thread_monitor.error_msg))
|
||||||
|
|
||||||
if self.showFileDialog.isChecked(): # TODO: this is not working
|
if self.showFileDialog.isChecked(): # TODO: this is not working
|
||||||
self.emit(SIGNAL("restore_progress(QString)"),
|
self.emit(QtCore.SIGNAL("restore_progress(QString)"),
|
||||||
'<b><font color="black">{0}</font></b>'.format(
|
'<b><font color="black">{0}</font></b>'.format(
|
||||||
self.tr(
|
self.tr(
|
||||||
"Please unmount your backup volume and cancel"
|
"Please unmount your backup volume and cancel"
|
||||||
@ -281,7 +284,7 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
self.target_appvm.run("QUBESRPC %s dom0" %
|
self.target_appvm.run("QUBESRPC %s dom0" %
|
||||||
"qubes.SelectDirectory")
|
"qubes.SelectDirectory")
|
||||||
else:
|
else:
|
||||||
file_dialog = QFileDialog()
|
file_dialog = QtGui.QFileDialog()
|
||||||
file_dialog.setReadOnly(True)
|
file_dialog.setReadOnly(True)
|
||||||
file_dialog.getExistingDirectory(
|
file_dialog.getExistingDirectory(
|
||||||
self, self.tr("Detach backup device"),
|
self, self.tr("Detach backup device"),
|
||||||
@ -304,7 +307,7 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
def reject(self): # TODO: probably not working too
|
def reject(self): # TODO: probably not working too
|
||||||
if self.currentPage() is self.commit_page:
|
if self.currentPage() is self.commit_page:
|
||||||
if self.backup_restore.canceled:
|
if self.backup_restore.canceled:
|
||||||
self.emit(SIGNAL("restore_progress(QString)"),
|
self.emit(QtCore.SIGNAL("restore_progress(QString)"),
|
||||||
'<font color="red">{0}</font>'
|
'<font color="red">{0}</font>'
|
||||||
.format(self.tr("Aborting the operation...")))
|
.format(self.tr("Aborting the operation...")))
|
||||||
self.button(self.CancelButton).setDisabled(True)
|
self.button(self.CancelButton).setDisabled(True)
|
||||||
@ -328,7 +331,7 @@ class RestoreVMsWindow(Ui_Restore, QWizard):
|
|||||||
return self.select_vms_widget.selected_list.count() > 0
|
return self.select_vms_widget.selected_list.count() > 0
|
||||||
|
|
||||||
def backup_location_changed(self, new_dir=None):
|
def backup_location_changed(self, new_dir=None):
|
||||||
self.select_dir_page.emit(SIGNAL("completeChanged()"))
|
self.select_dir_page.emit(QtCore.SIGNAL("completeChanged()"))
|
||||||
|
|
||||||
|
|
||||||
# Bases on the original code by:
|
# Bases on the original code by:
|
||||||
@ -340,18 +343,18 @@ def handle_exception(exc_type, exc_value, exc_traceback):
|
|||||||
filename = os.path.basename(filename)
|
filename = os.path.basename(filename)
|
||||||
error = "%s: %s" % (exc_type.__name__, exc_value)
|
error = "%s: %s" % (exc_type.__name__, exc_value)
|
||||||
|
|
||||||
QMessageBox.critical(None, "Houston, we have a problem...",
|
QtGui.QMessageBox.critical(None, "Houston, we have a problem...",
|
||||||
"Whoops. A critical error has occured. "
|
"Whoops. A critical error has occured. "
|
||||||
"This is most likely a bug "
|
"This is most likely a bug "
|
||||||
"in Qubes Restore VMs application.<br><br>"
|
"in Qubes Restore VMs application.<br><br>"
|
||||||
"<b><i>%s</i></b>" % error +
|
"<b><i>%s</i></b>" % error +
|
||||||
"at <b>line %d</b> of file <b>%s</b>.<br/><br/>"
|
"at <b>line %d</b> of file <b>%s</b>.<br/><br/>"
|
||||||
% (line, filename))
|
% (line, filename))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
||||||
qtapp = QApplication(sys.argv)
|
qtapp = QtGui.QApplication(sys.argv)
|
||||||
qtapp.setOrganizationName("The Qubes Project")
|
qtapp.setOrganizationName("The Qubes Project")
|
||||||
qtapp.setOrganizationDomain("http://qubes-os.org")
|
qtapp.setOrganizationDomain("http://qubes-os.org")
|
||||||
qtapp.setApplicationName("Qubes Restore VMs")
|
qtapp.setApplicationName("Qubes Restore VMs")
|
||||||
|
Loading…
Reference in New Issue
Block a user