4 from functools import partial
6 from PyQt4.QtCore import *
7 from PyQt4.QtGui import *
9 from ui.pcsuiutils import *
11 from pcsprogresswizard import *
13 from pcscheckboxwizard import *
14 from pcsopenfilewizard import *
15 from pcspcbackupmanager import *
16 from pcsdevicemanager import *
18 class PcsBackupWizard(QWizard):
20 ''' Class that creates a wizard responsible for doing backup '''
22 def __init__(self, deviceInfo, windowManager, parent = None):
23 QWizard.__init__(self, parent)
24 self.windowManager = windowManager
25 self.deviceInfo = deviceInfo
26 stylesheet = '''QWizard{background-image:url('''+ BACKUP_BG + ''')};'''
27 self.setStyleSheet(stylesheet)
28 self.setWindowIcon(QIcon(BACKUP_IMAGE))
29 self.setWindowTitle("%s Backup" % APPLICATION_NAME)
30 self.setFixedSize(WINDOW_WIDTH,WINDOW_HEIGHT)
32 self.setButtonLayout([])
33 self.setWizardStyle(4)
35 self.checkboxPage = PcsCheckboxWizard(self.deviceInfo, windowManager, self)
36 self.addPage(self.checkboxPage)
38 self.chooseFilePage = PcsOpenFileWizard(self.deviceInfo, windowManager, self)
39 self.connect(self.chooseFilePage.finishButton, SIGNAL("clicked()"),
41 self.addPage(self.chooseFilePage)
43 self.progressWizard = PcsProgressWizard(self.deviceInfo,self, windowManager, self)
47 self.connect(self.progressWizard.cancelButton, SIGNAL("clicked()"),
50 self.connect(self.progressWizard.doneButton, SIGNAL("clicked()"), self._done)
51 self.addPage(self.progressWizard)
56 if(str(self.chooseFilePage.getBackupName()).strip() == ""):
57 message = "Your backup name can't be blank."
58 showMessageBox(message, "Backup name blank")
65 self.progressWizard._resetPage()
66 self.chooseFilePage._resetPage()
68 def doNewBackup(self):
70 hostIp = self.deviceInfo.ip
71 backupName = self.chooseFilePage.getBackupName()
72 backupPath = self.chooseFilePage.getPath()
73 categories = self.checkboxPage.getCategories()
74 self.backupManager = PcsPcBackupManager()
75 self.backupManager.loadBackups()
78 self._updateThread = UpdateBackupProgress(backupName, backupPath,
79 hostIp,categories, comments,
82 self.connect(self._updateThread, SIGNAL("backupFinished"),
84 self.connect(self._updateThread, SIGNAL("backupCanceled"),
86 self.connect(self._updateThread, SIGNAL("backupNameChanged"),
87 self._onBackupNameChanged)
88 self.connect(self._updateThread, SIGNAL("backupProgress"),
89 self._updateCategoriesAndProgress)
91 self._updateThread.start()
93 def _updateCategoriesAndProgress(self, information):
94 progress, category = information
95 self.progressWizard.setProgress(progress)
96 self.progressWizard.setCategory(category)
99 def _onBackupDone(self, info):
100 self.progressWizard.updateInfo(info[0], info[1])
101 self.progressWizard.progressDone()
102 self.windowManager.getBackupManager().pcListView.updateBackupList()
104 def _onBackupNameChanged(self, correct_name):
106 Check if backup name was changed and show message case positive.
108 nameChangeMessage = "Backup with same name was found in" + \
109 " backup list, Backup name changed to %s" \
111 showMessageBox(nameChangeMessage, "Backup name changed")
113 def _onBackupCancel(self):
115 Stops current backup process in backup manager.
116 Also, shows a message box informing about canceling.
119 self.progressWizard.progressCanceled()
120 self.backupManager.setBackupInProgress(False)
122 class UpdateBackupProgress(QThread):
124 def __init__(self, backupName, path, hostIp, categories, comment,
125 backupManager, progressWizard):
126 QThread.__init__(self)
128 self.backupName = backupName
131 self.categories = categories
132 self.comment = comment
133 self.backupManager = backupManager
137 self._backupFlag = True
139 self.correctName = self.backupManager._verify_backup_name(self.backupName)
140 self.nameChanged = self.correctName != self.backupName
142 self.connect(self.backupManager, SIGNAL("backupProgress"), self._reEmitSignal)
143 self.connect(self.backupManager, SIGNAL("backupDone"), self._onBackupDone)
144 res = self.backupManager.createBackup(self.correctName, self.path,
145 self.hostIp, self.categories,
148 while (self._backupFlag):
151 def _reEmitSignal(self, informations):
152 self.emit(SIGNAL("backupProgress"), informations)
154 def _onBackupDone(self, res, info):
155 self._backupFlag = False
156 # If backup was not canceled, emit done signal
159 self.emit(SIGNAL("backupNameChanged"), self.correctName)
160 self.emit(SIGNAL("backupFinished"), info)
162 self.emit(SIGNAL("backupCanceled"))