mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-12-01 17:23:58 +00:00
4a04d9dd84
including the old qt and python wrappers as discussed in issue #113
63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
import sys,os
|
|
import time
|
|
from tempfile import NamedTemporaryFile
|
|
|
|
from PyQt4 import QtCore
|
|
|
|
parentdir = sys.path[0].split(os.sep)[:-1]
|
|
sys.path.append(os.sep.join(parentdir))
|
|
from tomblib.tomb import Tomb
|
|
from tomblib.parser import parse_line
|
|
|
|
class TombCreateThread(QtCore.QThread):
|
|
line_received = QtCore.pyqtSignal(QtCore.QString)
|
|
error_received = QtCore.pyqtSignal(QtCore.QString)
|
|
def __init__(self, tombpath, size, keypath, **opts):
|
|
QtCore.QThread.__init__(self)
|
|
self.tombpath = tombpath
|
|
self.size = size
|
|
self.keypath = keypath
|
|
self.opts = opts
|
|
|
|
self.err_thread = TombOutputThread()
|
|
self.err_thread.line_received.connect(self.line_received)
|
|
self.err_thread.error_received.connect(self.error_received)
|
|
|
|
def run(self):
|
|
self.err_thread.start()
|
|
self.status = Tomb.create(str(self.tombpath), str(self.size),
|
|
self.keypath, stderr=self.err_thread.buffer, **self.opts)
|
|
# self.err_thread.terminate()
|
|
|
|
def get_success(self):
|
|
return self.status
|
|
|
|
class TombOutputThread(QtCore.QThread):
|
|
line_received = QtCore.pyqtSignal(QtCore.QString)
|
|
error_received = QtCore.pyqtSignal(QtCore.QString)
|
|
progressed = QtCore.pyqtSignal(int) #value in percent
|
|
|
|
def __init__(self):
|
|
QtCore.QThread.__init__(self)
|
|
self.buffer = NamedTemporaryFile()
|
|
|
|
def run(self):
|
|
while True:
|
|
where = self.buffer.tell()
|
|
line = self.buffer.readline()
|
|
if not line:
|
|
time.sleep(1)
|
|
self.buffer.seek(where)
|
|
else:
|
|
#ansi color escapes messes this up, but it'ok anyway
|
|
self.line_received.emit(line)
|
|
self.parse_line(line)
|
|
|
|
def parse_line(self, line):
|
|
#This could be simplified, and s/search/match, if --no-color supported
|
|
#see #59
|
|
#TODO: this should be moved to tomblib.parse
|
|
parsed = parse_line(line)
|
|
if parsed and parsed['type'] == 'error':
|
|
self.error_received.emit(parsed.content)
|