tcreate.py - tomb - the crypto undertaker
HTML git clone git://parazyd.org/tomb.git
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
tcreate.py (5326B)
---
1 import sys, os
2
3 from PyQt4.QtGui import QApplication, QWizard
4 from PyQt4 import QtCore
5 from PyQt4 import QtGui
6 from ui_create import Ui_Wizard
7
8 if __name__ == '__main__':
9 parentdir = sys.path[0].split(os.sep)[:-1]
10 sys.path.append(os.sep.join(parentdir))
11 from tomblib.tomb import Tomb
12 from worker import TombCreateThread
13
14 try:
15 _fromUtf8 = QtCore.QString.fromUtf8
16 except AttributeError:
17 _fromUtf8 = lambda s: s
18
19 class TombCreateWizard(QWizard):
20 def __init__(self, *args, **kwargs):
21 QWizard.__init__(self, *args, **kwargs)
22 self.ui = ui = Ui_Wizard()
23 ui.setupUi(self)
24 #instance attributes:
25 self.ignore_swap = False
26 self._tomb_check = False #ugly; it's used by check_progress_complete
27
28 ui.wizardPage_tomb_location.registerField('tombpath*',
29 ui.lineEdit_tombpath) #required field, note the *
30 ui.wizardPage_key_location.setCommitPage(True)
31
32 QtCore.QObject.connect(ui.button_tombpath,
33 QtCore.SIGNAL(_fromUtf8('clicked()')),
34 self.on_tomb_location_clicked)
35 QtCore.QObject.connect(self,
36 QtCore.SIGNAL(_fromUtf8('currentIdChanged(int)')),
37 self.on_change_page)
38 QtCore.QObject.connect(ui.radioButton_swapoff,
39 QtCore.SIGNAL(_fromUtf8('toggled(bool)')),
40 ui.wizardPage_check.completeChanged)
41 QtCore.QObject.connect(ui.radioButton_ignore,
42 QtCore.SIGNAL(_fromUtf8('toggled(bool)')),
43 ui.wizardPage_check.completeChanged)
44 def check_progress_complete(*args, **kwargs):
45 if self.ui.progressBar.value() == 100:
46 return True
47 return False
48 def check_is_solved():
49 if self._tomb_check:
50 return True
51 if self.ui.radioButton_swapoff.isChecked() or \
52 self.ui.radioButton_ignore.isChecked():
53 return True
54 return False
55 self.ui.wizardPage_progress.isComplete = check_progress_complete
56 self.ui.wizardPage_check.isComplete = check_is_solved
57 self.ui.groupBox_swap.setVisible(False)
58 self.finished.connect(self.on_finish)
59
60 def _keyloc(self):
61 keyloc = None
62 if self.ui.radioButton_usb.isChecked():
63 print 'Warning: it is not supported'
64 raise NotImplementedError
65 elif self.ui.radioButton_near.isChecked():
66 print 'going near'
67 keyloc = None
68 else:
69 keyloc = self.ui.lineEdit_custom.text()
70 if not keyloc:
71 raise ValueError
72 return keyloc
73
74 def on_tomb_location_clicked(self, *args, **kwargs):
75 filename = QtGui.QFileDialog.getSaveFileName(self, 'Create Tomb',
76 filter="Tomb(*.tomb)")
77 self.ui.lineEdit_tombpath.setText(filename)
78 def on_change_page(self, pagenumber):
79 if self.currentPage() == self.ui.wizardPage_progress:
80 self.create_tomb()
81 if self.currentPage() == self.ui.wizardPage_check:
82 self.check_requisite()
83
84 def on_finish(self, finishedint):
85 if self.currentPage() != self.ui.wizardPage_end:
86 #there has been an error
87 return
88
89 if self.ui.checkBox_open.isChecked():
90 Tomb.open(self.ui.lineEdit_tombpath.text(), self._keyloc())
91 def on_thread_creation_finished(self):
92 if self.thread.get_success():
93 self.ui.progressBar.setValue(100)
94 else:
95 self.ui.progressBar.setEnabled(False)
96 self.ui.label_progress.setText('Error while creating the tomb!')
97 self.ui.wizardPage_progress.setFinalPage(True)
98 self.ui.wizardPage_progress.completeChanged.emit()
99 def create_tomb(self):
100 self.thread = TombCreateThread(self.ui.lineEdit_tombpath.text(),
101 str(self.ui.spinBox_size.value()), self._keyloc(),
102 no_color=False, ignore_swap=self.ui.radioButton_ignore.isChecked())
103 self.thread.finished.connect(self.on_thread_creation_finished)
104 self.thread.terminated.connect(self.on_thread_creation_finished)
105 self.thread.line_received.connect(self.ui.textBrowser_log.append)
106 def err_append_to_log(text):
107 self.ui.textBrowser_log.append('Error: <strong>' + text +
108 '</strong>')
109 self.thread.error_received.connect(err_append_to_log)
110 self.thread.start()
111 def check_requisite(self):
112 self._tomb_check = check = Tomb.check('create', no_color=False)
113 self.ui.wizardPage_check.completeChanged.emit()
114 if check:
115 self.ui.label_check.setText('Everything seems fine!')
116 return
117 self.ui.label_check.setText('Some error occurred')
118 if Tomb.check('create', no_color=False, ignore_swap=True): # swap is the only error
119 self.ui.groupBox_swap.setVisible(True)
120 #TODO: support swapoff
121 #TODO: calculate the amount of ram available vs swap used
122 self.ui.radioButton_swapoff.setEnabled(False)
123 self.ui.label_swapoff.setEnabled(False)
124
125
126 def run_create_wizard():
127 app = QApplication(sys.argv)
128 window = TombCreateWizard()
129 window.show()
130 sys.exit(app.exec_())
131
132 if __name__ == '__main__':
133 run_create_wizard()
134