Beispiel #1
0
class BtnFrame(QtGui.QFrame):
    def __init__(self, parent):
        self.tor_process = None
        self.torrc_path = None
        self.tor_start = False
        self.log_viewer = LogViewer(self)
        self.comms = Communicate()

        super(BtnFrame, self).__init__()
        self.init()

    def init(self):
        # button to start/stop Tor
        main_btn = QtGui.QPushButton('Start Tor', self)
        main_btn.clicked.connect(self.main_btn_clicked)
        main_btn.resize(main_btn.sizeHint())

        # show logs
        log_btn = QtGui.QPushButton('Show Logs', self)
        log_btn.clicked.connect(self.show_logs)
        log_btn.resize(log_btn.sizeHint())

        # show torrc
        torrc_btn = QtGui.QPushButton('Show Torrc', self)
        torrc_btn.clicked.connect(self.show_torrc)
        torrc_btn.resize(torrc_btn.sizeHint())

        # button to kill cipollini
        quit_btn = QtGui.QPushButton('Quit', self)
        quit_btn.clicked.connect(QtCore.QCoreApplication.instance().quit)
        quit_btn.resize(quit_btn.sizeHint())

        # initialise a horizontal box layout
        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(main_btn)
        hbox.addWidget(log_btn)
        hbox.addWidget(torrc_btn)
        hbox.addWidget(quit_btn)

        self.setLayout(hbox)
        self.setFrameStyle(QtGui.QFrame.StyledPanel)

    def read_tor_msg(self):
        msg = str(self.tor_process.readAll())
        self.comms.bootstrap_msg.emit(msg.strip())
        if "100%" in msg:
            self.comms.status_msg.emit("Started Tor")

    def start_tor(self, main_btn):
        self.tor_start = True
        self.tor_process, self.torrc_path = tools.launch_tor()
        self.tor_process.readyReadStandardOutput.connect(self.read_tor_msg)
        main_btn.setText("Stop Tor")
        self.comms.status_msg.emit("Bootstrapping Tor")

    def stop_tor(self, main_btn):
        # stop Tor
        self.tor_process.kill()
        self.tor_start = False
        self.comms.status_msg.emit("Stopped Tor")
        self.comms.bootstrap_msg.emit("Stopped Tor")
        main_btn.setText("Start Tor")

    def main_btn_clicked(self):
        main_btn = self.sender()
        if not self.tor_start:
            self.start_tor(main_btn)
        else:
            self.stop_tor(main_btn)

    def show_logs(self):
        #XXX: maybe create log_viewer only
        #     after log_btn is clicked?
        #     memory wastage?
        if self.log_viewer:
            self.log_viewer.show()
        else:
            # raise Exception
            pass

    def show_torrc(self):
        self.torrc_viewer = TorrcViewer(self.torrc_path)
        self.torrc_viewer.show()