Esempio n. 1
0
class SliceWidget(QWidget):
    """Custom widget to slice data"""
    # Signals
    sliceTimes = pyqtSignal(str, str)

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        # Labels
        sliceLabel = QLabel("Slicing")
        startLabel = QLabel("Start: ")
        endLabel = QLabel("End: ")

        # DateTimeEdit
        self.startDateTimeEdit = QDateTimeEdit()
        self.endDateTimeEdit = QDateTimeEdit()

        # Buttons
        applyButton = QPushButton("Apply")
        applyButton.clicked.connect(self.sendTimes)
        hideButton = QPushButton("Hide")
        hideButton.clicked.connect(self.hide)

        # Layouts
        # - Horizontal for start
        hStart = QHBoxLayout()
        hStart.addWidget(startLabel)
        hStart.addWidget(self.startDateTimeEdit)
        # - Horizontal for end
        hEnd = QHBoxLayout()
        hEnd.addWidget(endLabel)
        hEnd.addWidget(self.endDateTimeEdit)

        # - Vertical for self
        vWidget = QVBoxLayout()
        vWidget.addWidget(sliceLabel)
        vWidget.addLayout(hStart)
        vWidget.addLayout(hEnd)
        vWidget.addWidget(applyButton)
        vWidget.addWidget(hideButton)
        self.setLayout(vWidget)

    def sendTimes(self):
        self.sliceTimes.emit(self.startDateTimeEdit.text(),
                             self.endDateTimeEdit.text())

    def refresh(self, start, end):

        self.startDateTimeEdit.setMinimumDateTime(start)
        self.startDateTimeEdit.setMaximumDateTime(end)
        self.startDateTimeEdit.setDateTime(start)
        self.endDateTimeEdit.setMinimumDateTime(start)
        self.endDateTimeEdit.setMaximumDateTime(end)
        self.endDateTimeEdit.setDateTime(end)
Esempio n. 2
0
class Scheduler(QDialog):
    def __init__(self, photo, caption, ig):
        super(Scheduler, self).__init__()
        self.photo = photo
        self.caption = caption
        self.ig = ig
        self.init_ui()
        self.exec_()

    def init_ui(self):
        self.setWindowTitle("Schedule Post")
        self.date_edit = QDateTimeEdit(QDateTime.currentDateTime())
        self.date_edit.setDisplayFormat("dd.MM.yyyy hh:mm")
        self.date_edit.setMinimumDateTime(QDateTime.currentDateTime())

        self.calendar = QCalendarWidget(self)
        self.calendar.setGridVisible(True)

        self.calendar.setMinimumDate(QDate.currentDate())
        self.calendar.setSelectedDate(QDate.currentDate())
        self.calendar.clicked.connect(self.set_date_time)

        self.confirm_button = QPushButton("Confirm")
        self.confirm_button.clicked.connect(self.set_schedule)

        vbox = QVBoxLayout(self)
        vbox.addWidget(self.date_edit)
        vbox.addWidget(self.calendar)
        vbox.addWidget(self.confirm_button)

    def set_date_time(self, qDate):
        self.date_edit.setDate(qDate)

    def set_schedule(self):
        self.date_time = self.date_edit.dateTime()
        schedule = self.date_time.toPyDateTime()
        now = datetime.now()
        delta_t = schedule - now
        secs = delta_t.seconds + 1

        t = Timer(secs, self.ig.upload, [self.photo, self.caption])
        t.start()

        self.accept()
Esempio n. 3
0
class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'Nike bot'
        self.left = 600
        self.top = 300
        self.width = 670
        self.height = 480
        self.all_extensions = ["xlsx", "xlsm", "xlsb", "xls", "xlam"]
        self.browser = "firefox"
        self.my_threads = []
        self.current_date = ''
        self.data = []
        self.initUI()
        # req_proxy = RequestProxy()
        # self.proxies = req_proxy.get_proxy_list()
        # # self.rus_proxies = []
        # for proxy in self.proxies:
        #     if proxy.country == 'Russian Federation':
        #         print(proxy.country)
        #         self.rus_proxies.append(proxy)

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.setFixedSize(self.width, self.height)

        # Create widget
        label = QLabel(self)

        self.lable_file = QLabel(self)
        self.lable_file.setStyleSheet("background-color:red;")
        self.lable_file.setText("File is not uploaded")
        self.lable_file.setGeometry(470, 30, 135, 30)

        self.button_file = QPushButton(self)
        self.button_file.setStyleSheet(
            "background-color:#301b28;color:#ddc5a2;")
        self.button_file.setGeometry(470, 60, 135, 40)
        self.button_file.setText("Brows file")
        self.button_file.clicked.connect(lambda: self.openFileNameDialog())

        self.button_start = QPushButton(self)
        self.button_start.setGeometry(470, 250, 135, 40)
        self.button_start.setText("Start")
        self.button_start.setStyleSheet(
            "background-color:#301b28;color:#ddc5a2;")
        self.button_start.clicked.connect(
            lambda: self.create_threads(self.browser, self.data))
        self.button_start.setDisabled(True)

        self.button_close = QPushButton(self)
        self.button_close.setStyleSheet(
            "background-color:#301b28;color:#ddc5a2;")
        self.button_close.setGeometry(470, 290, 135, 40)
        self.button_close.setText("Close")
        self.button_close.clicked.connect(lambda: self.close_browsers())

        self.label_brows = QLabel(self)
        self.label_brows.setGeometry(470, 120, 135, 30)
        self.label_brows.setStyleSheet("color:#301b28;")
        self.label_brows.setText("Choose browser:")

        self.combo = QComboBox(self)
        self.combo.addItems(["firefox", "chrome", "opera"])
        self.combo.setGeometry(470, 150, 135, 40)
        self.combo.setStyleSheet("background-color:#301b28;color:#ddc5a2;")
        self.combo.activated[str].connect(self.setBrowser)

        self.table = QTableWidget(self)
        self.table.setGeometry(0, 0, 450, 400)
        self.table.setStyleSheet("background-color:#301b28;color:#ddc5a2;")
        self.table.setColumnCount(7)
        self.table.setRowCount(1)
        self.table.setItem(0, 0, QTableWidgetItem("Login"))
        self.table.setItem(0, 1, QTableWidgetItem("Password"))
        self.table.setItem(0, 2, QTableWidgetItem("Middle name"))
        self.table.setItem(0, 3, QTableWidgetItem("Card number"))
        self.table.setItem(0, 4, QTableWidgetItem("Date"))
        self.table.setItem(0, 5, QTableWidgetItem("Cvv"))
        self.table.setItem(0, 6, QTableWidgetItem("Url"))

        self.date_field = QDateTimeEdit(self)
        self.date_field.setGeometry(470, 350, 165, 40)
        self.date_field.setStyleSheet(
            "background-color:#301b28;color:#ddc5a2;")
        self.date_field.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        self.date_field.setMinimumDateTime(QDateTime.currentDateTime())

        self.url = QTextEdit(self)
        self.url.setGeometry(10, 430, 400, 30)
        self.url.setStyleSheet("background-color:#301b28;color:#ddc5a2;")

        self.url_text = QLabel(self)
        self.url_text.setGeometry(10, 400, 400, 30)
        self.url_text.setStyleSheet("color:#301b28;")
        self.url_text.setText("Url:")

        self.button_url = QPushButton(self)
        self.button_url.setStyleSheet(
            "background-color:#301b28;color:#ddc5a2;")
        self.button_url.setGeometry(410, 430, 100, 30)
        self.button_url.setText("ADD")
        self.button_url.clicked.connect(lambda: self.add_url())

        self.usr_text = QLabel(self)
        self.usr_text.setGeometry(520, 430, 80, 30)
        self.usr_text.setStyleSheet("color:#301b28;")
        self.usr_text.setText("User count:")

        self.users = QTextEdit(self)
        self.users.setGeometry(600, 430, 40, 30)
        self.users.setStyleSheet("background-color:#301b28;color:#ddc5a2;")

        pixmap = QPixmap('static/back.jpeg').scaled(self.width, self.height)
        label.setPixmap(pixmap)

        self.show()

    def openFileNameDialog(self):
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(
            self, "QFileDialog.getOpenFileName()", "", "", options=options)
        extension = fileName.split(".")[-1]

        if fileName and extension in self.all_extensions:
            self.start(fileName)
        else:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Critical)
            msg.setStyleSheet("background-color:#301b28;color:#ddc5a2;")
            msg.setText("Wrong file format!")
            msg.setInformativeText('Only excel file format')
            msg.setWindowTitle("Error")
            msg.exec_()

    def setBrowser(self, browser):
        self.browser = browser

    def start(self, name):
        self.lable_file.setStyleSheet("background-color:green;")
        self.lable_file.setText("    File is uploaded")
        self.data = pars_xls(name)
        if self.data != "Wrong header params, should be:  Login, Password, Middle_name, Card_number, Date, Cvv":
            self.table.setRowCount(len(self.data))
            self.user_count = len(self.data) - 1
            self.users.setText(str(self.user_count))
            self.fill_table()
        else:
            msg = QMessageBox()
            msg.setIcon(QMessageBox.Critical)
            msg.setStyleSheet("background-color:#301b28;color:#ddc5a2;")
            msg.setText("Wrong file format!")
            msg.setInformativeText(
                "Wrong header params, should be:  Login, Password, Middle_name, Card_number, Date, Cvv"
            )
            msg.setWindowTitle("Error")
            msg.exec_()

    def fill_table(self):
        self.table.setItem(0, 0, QTableWidgetItem("Login"))
        self.table.setItem(0, 1, QTableWidgetItem("Password"))
        self.table.setItem(0, 2, QTableWidgetItem("Middle name"))
        self.table.setItem(0, 3, QTableWidgetItem("Card number"))
        self.table.setItem(0, 4, QTableWidgetItem("Date"))
        self.table.setItem(0, 5, QTableWidgetItem("Cvv"))
        self.table.setItem(0, 6, QTableWidgetItem("Url"))
        for i in range(len(self.data) - 1):
            for j in range(len(self.data[i])):
                self.table.setItem(i + 1, j, QTableWidgetItem(self.data[i][j]))

    def create_threads(self, browser, data):
        self.button_start.setDisabled(True)
        k = len(self.my_threads)
        self.user_count = int(self.users.toPlainText())
        drop_time = int(
            datetime.fromisoformat(self.date_field.dateTime().toString(
                "yyyy-MM-dd HH:mm:ss")).timestamp())

        for i in data:
            # proxy = self.rus_proxies[k].get_address()
            self.my_threads.append(
                bot_on_thread(url=i[6],
                              browser=browser,
                              login=i[0],
                              password=i[1],
                              middle_name=i[2],
                              cardNumber=i[3],
                              cardExpiry=i[4],
                              cardCvc=i[5],
                              drop_time=drop_time))
            self.my_threads[k].start()
            k += 1

            if k == self.user_count:
                break

    def close_browsers(self):
        for i in self.my_threads:
            try:
                i.close_browser()
            except:
                del i
                continue
            del i
        self.my_threads = []
        self.button_start.setDisabled(False)

    def add_url(self):
        if len(self.data) != 0:
            for i in range(len(self.data)):
                self.data[i].append(self.url.toPlainText())
                self.table.setItem(i + 1, 6,
                                   QTableWidgetItem(self.url.toPlainText()))
            self.button_start.setDisabled(False)
            print(self.data)
Esempio n. 4
0
class Ui_MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        self.transprot_mass =[]
        self.netprot_mass =[]
        self.filtering_is_on = 0

        grid = QGridLayout()
        self.setLayout(grid)

        self.IP_list = IP_list(self)
        self.TransProt_list = TransProt_list(self)
        self.NetProt_list = NetProt_list(self)
        self.setWindowTitle('Гамма')
        self.setWindowIcon(QIcon('допочки\Gamma_200x200.png'))
        self.resize(740, 830)
        self.to_center()
        self.centralwidget = QWidget(self)
        self.tabWidget = QTabWidget(self.centralwidget)
        self.tabWidget.setGeometry(QRect(20, 20, 700, 750))
        self.tab = QWidget()

        grid.addWidget(self.tab)

        self.cb_time = QCheckBox(self.tab)
        self.cb_time.setGeometry(QRect(360, 130, 120, 20))
        self.cb_time.setText("Фильтр по времени")
        self.cb_prot = QCheckBox(self.tab)
        self.cb_prot.setGeometry(QRect(20, 130, 140, 20))
        self.cb_prot.setText("Фильтр по протоколам")
        self.cb_addr = QCheckBox(self.tab)
        self.cb_addr.setGeometry(QRect(360, 290, 130, 20))
        self.cb_addr.setText("Фильтр по IP-адресам")

        self.dt_beg = QDateTimeEdit(self.tab)
        self.dt_beg.setGeometry(QRect(360, 210, 150, 20))
        self.dt_beg.setDateTime(QDateTime.currentDateTime())
        self.dt_beg.setDisplayFormat("dd.MM.yyyy H:mm:ss.zzz")
        self.dt_beg.setCalendarPopup(True)
        self.dt_beg.setToolTip('Выбрать начальное время (>=)')
        self.dt_beg.setEnabled(False)

        self.dt_end = QDateTimeEdit(self.tab)
        self.dt_end.setGeometry(QRect(520, 210, 150, 20))
        self.dt_end.setDateTime(QDateTime.currentDateTime())
        self.dt_end.setDisplayFormat("dd.MM.yyyy H:mm:ss.zzz")
        self.dt_end.setCalendarPopup(True)
        self.dt_end.setToolTip('Выбрать конечное время (<)')
        self.dt_end.setEnabled(False)

        self.dt_beg.dateChanged.connect(lambda dc: self.date_changed(1))
        self.dt_end.dateChanged.connect(lambda dc: self.date_changed(2))

        #self.l_input_dir = QLabel(self.tab)
        #self.l_input_dir.setGeometry(QRect(102, 50, 180, 15))
        #self.l_input_dir.setText("Выберите директорию с файлами")
        #self.l_or = QLabel(self.tab)
        #self.l_or.setGeometry(QRect(340, 50, 21, 16))
        #self.l_or.setText("ИЛИ")
        self.l_input_file = QLabel(self.tab)
        self.l_input_file.setGeometry(QRect(300, 50, 90, 15))
        self.l_input_file.setText("Выберите файлы")
        self.l_transpr = QLabel(self.tab)
        self.l_transpr.setGeometry(QRect(50, 190, 180, 16))
        self.l_transpr.setEnabled(False)
        self.l_transpr.setText("Протоколы Транспортного уровня")
        self.l_netpr = QLabel(self.tab)
        self.l_netpr.setGeometry(QRect(50, 290, 180, 16))
        self.l_netpr.setEnabled(False)
        self.l_netpr.setText("Протоколы Сетевого уровня")
        self.l_beg = QLabel(self.tab)
        self.l_beg.setGeometry(QRect(390, 190, 60, 16))
        self.l_beg.setEnabled(False)
        self.l_beg.setText("Начиная с..")
        self.l_end = QLabel(self.tab)
        self.l_end.setGeometry(QRect(560, 190, 80, 16))
        self.l_end.setEnabled(False)
        self.l_end.setText("Оканчивая до..")
        self.l_name = QLabel(self.tab)
        self.l_name.setGeometry(QRect(300, 450, 96, 16))
        self.l_name.setText("Как назвать файл?")
        self.l_filt = QLabel(self.tab)
        self.l_filt.setGeometry(QRect(300, 10, 91, 16))
        self.l_filt.setText("Выборка пакетов")

        self.line = QFrame(self.tab)
        self.line.setGeometry(QRect(0, 110, 690, 15))
        self.line.setFrameShape(QFrame.HLine)
        self.line.setFrameShadow(QFrame.Sunken)
        self.line_2 = QFrame(self.tab)
        self.line_2.setGeometry(QRect(340, 120, 15, 300))
        self.line_2.setFrameShape(QFrame.VLine)
        self.line_2.setFrameShadow(QFrame.Sunken)
        self.line_3 = QFrame(self.tab)
        self.line_3.setGeometry(QRect(0, 420, 690, 15))
        self.line_3.setFrameShape(QFrame.HLine)
        self.line_3.setFrameShadow(QFrame.Sunken)

        #self.le_dir = QLineEdit(self.tab)
        #self.le_dir.setGeometry(QRect(110, 80, 211, 20))
        #self.le_dir.setEnabled(False)
        #self.le_dir.setReadOnly(True)
        self.le_file = QLineEdit(self.tab)
        self.le_file.setGeometry(QRect(250, 80, 211, 20))
        #self.le_file.setEnabled(False)
        self.le_file.setReadOnly(True)
        self.le_name = QLineEdit(self.tab)
        self.le_name.setGeometry(QRect(250, 480, 231, 20))

        self.pt_transpr = QPlainTextEdit(self.tab)
        self.pt_transpr.setGeometry(QRect(50, 210, 271, 71))
        self.pt_transpr.setEnabled(False)
        self.pt_transpr.setReadOnly(True)
        self.pt_netpr = QPlainTextEdit(self.tab)
        self.pt_netpr.setGeometry(QRect(50, 320, 271, 71))
        self.pt_netpr.setEnabled(False)
        self.pt_netpr.setReadOnly(True)

        self.pt_addr = QPlainTextEdit(self.tab)
        self.pt_addr.setGeometry(QRect(390, 320, 271, 71))
        self.pt_addr.setEnabled(False)
        self.pt_log = QPlainTextEdit(self.tab)
        self.pt_log.setGeometry(QRect(20, 610, 651, 101))
        self.pt_log.setReadOnly(True)

        self.progressBar = QProgressBar(self.tab)
        self.progressBar.setGeometry(QRect(20, 580, 651, 20))
        self.progressBar.setFormat("%v" + "%")
        self.progressBar.setMaximum(100)
        self.progressBar.setValue(0)

        #self.pb_dir = QPushButton(self.tab)
        #self.pb_dir.setGeometry(QRect(80, 80, 21, 20))
        #self.pb_dir.setIcon(QIcon('допочки\_folder.png'))
        #self.pb_dir.clicked.connect(lambda gd: self.get_directory(1))
        self.pb_file = QPushButton(self.tab)
        self.pb_file.setGeometry(QRect(220, 80, 21, 20))
        self.pb_file.setIcon(QIcon('допочки\_folder.png'))
        self.pb_file.clicked.connect(lambda gf: self.get_files(1))
        self.pb_time = QPushButton(self.tab)
        self.pb_time.setGeometry(QRect(480, 240, 71, 20))
        self.pb_time.setToolTip('Добавить ещё временной отрезок')
        self.pb_time.setEnabled(False)
        self.pb_time.setText("Ещё!")

        self.pb_transpr = QPushButton(self.tab)
        self.pb_transpr.setGeometry(QRect(20, 210, 21, 20))
        self.pb_transpr.setToolTip('Выбрать протоколы Транспортного уровня')
        self.pb_transpr.setIcon(QIcon('допочки\_blank.png'))
        self.pb_transpr.setEnabled(False)
        self.pb_transpr.clicked.connect(self.TransProt_list.exec)

        self.pb_netpr = QPushButton(self.tab)
        self.pb_netpr.setGeometry(QRect(20, 320, 21, 20))
        self.pb_netpr.setToolTip('Выбрать протоколы Сетевого уровня')
        self.pb_netpr.setIcon(QIcon('допочки\_blank.png'))
        self.pb_netpr.setEnabled(False)
        self.pb_netpr.clicked.connect(self.NetProt_list.exec)
        self.pb_addr = QPushButton(self.tab)
        self.pb_addr.setGeometry(QRect(530, 290, 132, 20))
        self.pb_addr.setText('Редактировать список')
        self.pb_addr.setEnabled(False)
        self.pb_addr.clicked.connect(self.IP_list.exec)
        self.pb_name = QPushButton(self.tab)
        self.pb_name.setGeometry(QRect(220, 480, 21, 20))
        self.pb_name.setIcon(QIcon('допочки\_folder.png'))
        self.pb_name.clicked.connect(lambda ed: self.extract_to_directory(1))
        self.pb_start = QPushButton(self.tab)
        self.pb_start.setGeometry(QRect(220, 510, 261, 41))
        self.pb_start.setText("Начать выборку")
        self.pb_start.clicked.connect(self.do_it_motherFucker)

        #self.radiobutton = QRadioButton(self.tab)
        #self.radiobutton.setGeometry(QRect(84, 48, 20, 20))
        #self.radiobutton_2 = QRadioButton(self.tab)
        #self.radiobutton_2.setGeometry(QRect(424, 48, 20, 20))

        #self.radiobutton.raise_()
        #self.radiobutton_2.raise_()
        self.cb_time.raise_()
        self.cb_prot.raise_()
        self.cb_addr.raise_()
        self.dt_beg.raise_()
        self.dt_end.raise_()
        #self.l_input_dir.raise_()
        #self.l_or.raise_()
        self.l_input_file.raise_()
        self.l_transpr.raise_()
        self.l_netpr.raise_()
        self.l_beg.raise_()
        self.l_end.raise_()
        self.l_name.raise_()
        self.l_filt.raise_()
        self.line.raise_()
        self.line_2.raise_()
        self.line_3.raise_()
        #self.le_dir.raise_()
        self.le_file.raise_()
        self.le_name.raise_()
        self.pt_transpr.raise_()
        self.pt_netpr.raise_()
        self.pt_addr.raise_()
        self.pt_log.raise_()
        self.progressBar.raise_()
        #self.pb_dir.raise_()
        self.pb_file.raise_()
        self.pb_time.raise_()
        self.pb_transpr.raise_()
        self.pb_netpr.raise_()
        self.pb_addr.raise_()
        self.pb_name.raise_()
        self.pb_start.raise_()
        self.setCentralWidget(self.centralwidget)
        self.statusbar = QStatusBar(self)
        self.setStatusBar(self.statusbar)
        self.tabWidget.addTab(self.tab, "")

        self.cb_time.clicked['bool'].connect(self.dt_beg.setEnabled)
        self.cb_time.clicked['bool'].connect(self.dt_end.setEnabled)
        self.cb_time.clicked['bool'].connect(self.l_beg.setEnabled)
        self.cb_time.clicked['bool'].connect(self.l_end.setEnabled)
        self.cb_prot.clicked['bool'].connect(self.l_transpr.setEnabled)
        self.cb_prot.clicked['bool'].connect(self.l_netpr.setEnabled)
        self.cb_prot.clicked['bool'].connect(self.pt_transpr.setEnabled)
        self.cb_prot.clicked['bool'].connect(self.pt_netpr.setEnabled)
        self.cb_prot.clicked['bool'].connect(self.pb_transpr.setEnabled)
        self.cb_prot.clicked['bool'].connect(self.pb_netpr.setEnabled)
        self.cb_addr.clicked['bool'].connect(self.pt_addr.setEnabled)
        self.cb_addr.clicked['bool'].connect(self.pb_addr.setEnabled)



        #####------------------------------2_TAB



        self.tab_2 = QWidget()
        self.tabWidget.addTab(self.tab_2, "")
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), ("II работа с файлами"))

        self.l_merge = QLabel(self.tab_2)
        self.l_merge.setGeometry(QRect(300, 10, 180, 16))
        self.l_merge.setText("Объединение файлов")

        self.l_arch = QLabel(self.tab_2)
        self.l_arch.setGeometry(QRect(300, 250, 180, 16))
        self.l_arch.setText("Архивирование файлов")

        #self.radiobutton_3 = QRadioButton(self.tab_2)
        #self.radiobutton_3.setGeometry(QRect(84, 48, 20, 20))
        #self.radiobutton_4 = QRadioButton(self.tab_2)
        #self.radiobutton_4.setGeometry(QRect(424, 48, 20, 20))

        #self.l_input_dir2 = QLabel(self.tab_2)
        #self.l_input_dir2.setGeometry(QRect(102, 50, 180, 15))
        #self.l_input_dir2.setText("Выберите директорию с файлами")
        #self.l_or2 = QLabel(self.tab_2)
        #self.l_or2.setGeometry(QRect(340, 50, 21, 16))
        #self.l_or2.setText("ИЛИ")
        self.l_input_file2 = QLabel(self.tab_2)
        self.l_input_file2.setGeometry(QRect(102, 50, 180, 15))#442, 50, 90, 15))
        self.l_input_file2.setText("Выберите файлы")
        self.l_name2 = QLabel(self.tab_2)
        self.l_name2.setGeometry(QRect(442, 50, 180, 15))#280, 140, 180, 16))
        self.l_name2.setText("Куда сохранить результат?")
        self.l_ciph2 = QLabel(self.tab_2)
        self.l_ciph2.setGeometry(QRect(84, 298, 180, 15))
        self.l_ciph2.setText("Убрать шифрованный трафик")
        self.l_arch2 = QLabel(self.tab_2)
        self.l_arch2.setGeometry(QRect(424, 298, 180, 15))
        self.l_arch2.setText("Заархивировать файлы")


        #self.le_dir2 = QLineEdit(self.tab_2)
        #self.le_dir2.setGeometry(QRect(110, 80, 211, 20))
        #self.le_dir2.setEnabled(False)
        self.le_file2 = QLineEdit(self.tab_2)
        self.le_file2.setGeometry(QRect(110, 80, 211, 20))#450, 80, 211, 20))
        self.le_file2.setReadOnly(True)
        self.le_name2 = QLineEdit(self.tab_2)
        self.le_name2.setGeometry(QRect(450, 80, 211, 20))#260, 170, 180, 20))

        #self.pb_dir2 = QPushButton(self.tab_2)
        #self.pb_dir2.setGeometry(QRect(80, 80, 21, 20))
        #self.pb_dir2.setIcon(QIcon('допочки\_folder.png'))
        #self.pb_dir2.clicked.connect(lambda gd: self.get_directory(2))
        self.pb_file2 = QPushButton(self.tab_2)
        self.pb_file2.setGeometry(QRect(80, 80, 21, 20))#420, 80, 21, 20))
        self.pb_file2.setIcon(QIcon('допочки\_folder.png'))
        self.pb_file2.clicked.connect(lambda gf: self.get_files(2))
        self.pb_name2 = QPushButton(self.tab_2)
        self.pb_name2.setGeometry(QRect(420, 80, 21, 20))#230, 170, 21, 20))
        self.pb_name2.setIcon(QIcon('допочки\_folder.png'))
        self.pb_name2.clicked.connect(lambda ed: self.extract_to_directory(2))
        self.pb_merge = QPushButton(self.tab_2)
        self.pb_merge.setGeometry(QRect(270, 170, 160, 20))
        self.pb_merge.setText("Объединить")
        self.pb_merge.clicked.connect(self.merge_it_motherFucker)

        self.line_4 = QFrame(self.tab_2)
        self.line_4.setGeometry(QRect(0, 280, 690, 15))
        self.line_4.setFrameShape(QFrame.HLine)
        self.line_4.setFrameShadow(QFrame.Sunken)
        self.line_5 = QFrame(self.tab_2)
        self.line_5.setGeometry(QRect(0, 580, 690, 15))
        self.line_5.setFrameShape(QFrame.HLine)
        self.line_5.setFrameShadow(QFrame.Sunken)

        self.pt_log2 = QPlainTextEdit(self.tab_2)
        self.pt_log2.setGeometry(QRect(20, 610, 651, 101))
        self.pt_log2.setReadOnly(True)

        self.graphicsView = QGraphicsView(self.tab_2)
        self.graphicsView.setGeometry(QRect(0, 330, 714, 277))
        self.scene = QGraphicsScene()
        self.graphicsView.setScene(self.scene)
        self.scene.addPixmap(QPixmap('допочки\_in_working_3.png'))

        self.l_merge.raise_()
        self.l_arch.raise_()
        #self.l_input_dir2.raise_()
        #self.l_or2.raise_()
        self.l_input_file2.raise_()
        self.l_name2.raise_()
        #self.radiobutton_3.raise_()
        #self.radiobutton_4.raise_()
        #self.pb_dir2.raise_()
        self.pb_file2.raise_()
        self.pb_name2.raise_()
        #self.le_dir2.raise_()
        self.le_file2.raise_()
        self.le_name2.raise_()
        self.line_4.raise_()
        self.line_5.raise_()
        self.pt_log2.raise_()



        #####------------------------------2_TAB

        #####------------------------------3_TAB

        self.tab_3 = QWidget()
        self.tabWidget.addTab(self.tab_3, "")
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), ("III Проверка на аномальную активность"))
        self.tab_3.setEnabled(False)

        self.l_filt3 = QLabel(self.tab_3)
        self.l_filt3.setGeometry(QRect(300, 10, 91, 16))
        self.l_filt3.setText("Выборка пакетов")

        self.l_input_file3 = QLabel(self.tab_3)
        self.l_input_file3.setGeometry(QRect(300, 50, 90, 15))
        self.l_input_file3.setText("Выберите файлы")

        self.pb_file3 = QPushButton(self.tab_3)
        self.pb_file3.setGeometry(QRect(220, 80, 21, 20))
        self.pb_file3.setIcon(QIcon('допочки\_folder.png'))
        self.pb_file3.clicked.connect(lambda gf: self.get_files(3))

        self.le_file3 = QLineEdit(self.tab_3)
        self.le_file3.setGeometry(QRect(250, 80, 211, 20))
        self.le_file3.setReadOnly(True)

        self.pb_graphy = QPushButton(self.tab_3)
        self.pb_graphy.setGeometry(QRect(270, 170, 160, 20))
        self.pb_graphy.setText("Построить граф")
        #self.pb_graphy.clicked.connect(self.graph_it)

        #self.label_6 = QLabel(self.tab_3)
        #self.pixmap = QPixmap('допочки\_in_working_1.png')
        #self.label_6.setPixmap(self.pixmap)

        self.l_filt3.raise_()
        self.l_input_file3.raise_()
        self.pb_file3.raise_()
        self.le_file3.raise_()


        #####------------------------------3_TAB

        #####----------------------------IN_WORK



        self.tab_4 = QWidget()
        self.tabWidget.addTab(self.tab_4, "")
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), ("...IV visualization..."))
        self.tab_4.setEnabled(False)


        self.label_7 = QLabel(self.tab_4)
        self.pixmap_2 = QPixmap('допочки\_in_working_2.png')
        self.label_7.setPixmap(self.pixmap_2)

        #####----------------------------IN_WORK





        self.tabWidget.setCurrentIndex(0)
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), ("I выборка пакетов"))
        QMetaObject.connectSlotsByName(self)

        self.show()

    def closeEvent(self, event):
        reply = QMessageBox.question(self, 'Ща закроется всё', "Ты чо, реально хочешь выйти?",
                                     QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    def to_center(self):
        qr = self.frameGeometry()
        qr.moveCenter(QDesktopWidget().availableGeometry().center())
        self.move(qr.topLeft())


    def get_directory(self, gd):
        if gd == 1:
            result = QFileDialog.getExistingDirectory()
            #self.le_dir.setText(result)
            self.le_file.setDisabled(True)
            #self.le_dir.setEnabled(True)
            #self.radiobutton_2.setChecked(False)
            #self.radiobutton.setChecked(True)
        else:
            result = QFileDialog.getExistingDirectory()
            #self.le_dir2.setText(result)
            self.le_file2.setDisabled(True)
            #self.le_dir2.setEnabled(True)
            #self.radiobutton_4.setChecked(False)
            #self.radiobutton_3.setChecked(True)

    def get_files(self, gf):
        if gf == 1:
            result, bullshit = QFileDialog.getOpenFileNames(self, "Выберите pcap-файлы", getcwd(), "files (*.pcap *.pcapng)")
            #self.le_dir.setDisabled(True)
            self.le_file.setEnabled(True)
            #self.radiobutton.setChecked(False)
            #self.radiobutton_2.setChecked(True)
            if len(result):
                self.le_file.setText(", ".join(result))
        elif gf == 3:
            result, bullshit = QFileDialog.getOpenFileNames(self, "Выберите pcap-файлы", getcwd(), "files (*.pcap *.pcapng)")
            #self.le_dir.setDisabled(True)
            self.le_file3.setEnabled(True)
            #self.radiobutton.setChecked(False)
            #self.radiobutton_2.setChecked(True)
            if len(result):
                self.le_file3.setText(", ".join(result))
        else:
            result, bullshit = QFileDialog.getOpenFileNames(self, "Выберите pcap-файлы", getcwd(), "files (*.pcap *.pcapng)")
            #self.le_dir2.setDisabled(True)
            self.le_file2.setEnabled(True)
            #self.radiobutton_3.setChecked(False)
            #self.radiobutton_4.setChecked(True)
            if len(result):
                self.le_file2.setText(", ".join(result))

    def date_changed(self, dc):
        if dc == 1:
            self.dt_end.setMinimumDateTime(QDateTime(self.dt_beg.dateTime()))
        else:
            self.dt_beg.setMaximumDateTime(QDateTime(self.dt_end.dateTime()))

    def extract_to_directory(self, ed):
        if ed == 1:
            result, bullshit =QFileDialog.getSaveFileName(self, "Сохранить файл", getcwd(), "files (*.pcap *.pcapng)")
            self.le_name.setText(result)
        else:
            result, bullshit =QFileDialog.getSaveFileName(self, "Сохранить файл", getcwd(), "files (*.pcap *.pcapng)")
            self.le_name2.setText(result)


    def do_it_motherFucker(self):
        if self.filtering_is_on == 0:
            #if ((not self.radiobutton.isChecked() and not self.radiobutton_2.isChecked())\
            #    or (self.radiobutton.isChecked() and self.le_dir.text() == '')\
            #        or (self.radiobutton_2.isChecked() and self.le_file.text() == ''))\
            #            and self.le_name.text() == '':
            if self.le_file.text() == '' and self.le_name.text() == '':
                self.pt_log.appendPlainText("  " + "Какие файлы обработать? Куда сохранить? Такая неопределённость..")
            #elif (not self.radiobutton.isChecked() and not self.radiobutton_2.isChecked()) or (self.radiobutton.isChecked() and self.le_dir.text() == '') or (self.radiobutton_2.isChecked() and self.le_file.text() == ''):
            elif self.le_file.text() == '':
                self.pt_log.appendPlainText("  " + "Какие файлы обработать?")
            elif self.le_name.text() == '':
                self.pt_log.appendPlainText("  " + "Куда сохранить?")
            else:
                self.filtering_is_on = 1  # эти пиздецы в идеале нужно заменить на что-нибудь адекватное
                self.count_for_pr_b = 0 # эти пиздецы в идеале нужно заменить на что-нибудь адекватное
                self.progressBar.setValue(0)
                self.pb_start.setText("Остановить выборку")

                #my_directory = self.le_dir.text()
                pcap_files_in = self.le_file.text()
                pcap_file_out = self.le_name.text()
                per_quest = 0
                per_beg = ''
                per_end = ''
                prot_quest = 0
                net_prot = 0
                trans_prot = 0
                appl_prot = 0 ##
                ip_quest = 0
                netprot_mass = []
                transprot_mass = []
                addr_mass = []

                if (pcap_file_out.endswith(".pcap") or pcap_file_out.endswith(".pcapng")) == False:
                    pcap_file_out = pcap_file_out + ".pcap"

                self.pt_log.appendPlainText("Сохранить в:")
                self.pt_log.appendPlainText("  " + pcap_file_out)

                #if self.radiobutton.isChecked():
                #    onlyfiles = [my_directory + '/' + f for f in listdir(my_directory) if
                #                 f.endswith(".pcap") or f.endswith(".pcapng") and isfile(join(my_directory, f))]
                #    self.for_pr_b = len(onlyfiles)
#
                #    self.pt_log.appendPlainText("Выбрана директория:")
                #    self.pt_log.appendPlainText("  " + self.le_dir.text())
                #    self.pt_log.appendPlainText("С pcap-файлами:")
                #    for file in onlyfiles:
                #        bullshit, fname = file.rsplit('/', 1)
                #        self.pt_log.appendPlainText("  " + fname)

                #elif self.radiobutton_2.isChecked():
                onlyfiles = pcap_files_in.split(', ')
                self.for_pr_b = len(onlyfiles)

                self.pt_log.appendPlainText("Выбраны pcap-файлы:")
                for file in onlyfiles:
                    self.pt_log.appendPlainText("  " + (file))

                if self.cb_addr.isChecked() and self.pt_addr.toPlainText() != '':
                    ip_quest = 1
                    addr_mass = self.pt_addr.toPlainText().splitlines()

                if self.cb_time.isChecked():
                    per_quest = 1
                    per_beg = self.dt_beg.dateTime()
                    per_end = self.dt_end.dateTime()

                if self.cb_prot.isChecked():
                    prot_quest = 1
                    transprot_mass = self.transprot_mass
                    netprot_mass = self.netprot_mass

                if self.pt_transpr.toPlainText() != '':
                    trans_prot = 1
                if self.pt_netpr.toPlainText() != '':
                    net_prot = 1

                #self.radiobutton.setDisabled(True)
                #self.radiobutton_2.setDisabled(True)
                #self.l_input_dir.setDisabled(True)
                #self.l_or.setDisabled(True)
                self.l_input_file.setDisabled(True)
                #self.pb_dir.setDisabled(True)
                self.pb_file.setDisabled(True)
                #self.le_dir.setDisabled(True)
                self.le_file.setDisabled(True)
                self.cb_time.setDisabled(True)
                self.cb_prot.setDisabled(True)
                self.cb_addr.setDisabled(True)
                self.l_transpr.setDisabled(True)
                self.l_netpr.setDisabled(True)
                self.l_beg.setDisabled(True)
                self.l_end.setDisabled(True)
                self.l_name.setDisabled(True)
                self.l_filt.setDisabled(True)
                self.le_name.setDisabled(True)
                self.dt_beg.setDisabled(True)
                self.dt_end.setDisabled(True)
                self.pt_transpr.setDisabled(True)
                self.pt_netpr.setDisabled(True)
                self.pt_addr.setDisabled(True)
                self.pb_time.setDisabled(True)
                self.pb_transpr.setDisabled(True)
                self.pb_netpr.setDisabled(True)
                self.pb_addr.setDisabled(True)
                self.pb_name.setDisabled(True)

                self.worker = WorkerThread(onlyfiles, pcap_file_out, per_quest, per_beg, per_end, prot_quest, net_prot,
                                           netprot_mass, trans_prot, transprot_mass, appl_prot, ip_quest, addr_mass)
                self.worker.callback_received.connect(self.append_to_log)
                self.worker.start()
                self.pt_log.appendPlainText("")
                self.pt_log.appendPlainText("В работе:")
        elif self.filtering_is_on == 1:
            self.worker.terminate()
            self.pt_log.appendPlainText("")
            self.pt_log.appendPlainText("Работа прервана")
            self.pt_log.appendPlainText("")
            self.pt_log.appendPlainText("")
            self.go_to_starting_set()

    def append_to_log(self, x):
        self.count_for_pr_b += 1
        self.pt_log.appendPlainText("")
        self.pt_log.appendPlainText(x)
        self.progressBar.setValue(self.count_for_pr_b * 100 / (self.for_pr_b + 1))

        if self.progressBar.value() == 100:
            self.pt_log.appendPlainText("")
            self.pt_log.appendPlainText("")
            self.go_to_starting_set()

    def go_to_starting_set(self):
        self.filtering_is_on = 0
        self.pb_start.setText("Начать выборку")

        #self.radiobutton.setDisabled(False)
        #self.radiobutton_2.setDisabled(False)
        #self.l_input_dir.setDisabled(False)
        #self.l_or.setDisabled(False)
        self.l_input_file.setDisabled(False)
        #self.pb_dir.setDisabled(False)
        self.pb_file.setDisabled(False)
        #self.le_dir.setDisabled(False)
        self.le_file.setDisabled(False)
        self.cb_time.setDisabled(False)
        self.cb_prot.setDisabled(False)
        self.cb_addr.setDisabled(False)
        self.l_name.setDisabled(False)
        self.l_filt.setDisabled(False)
        self.le_name.setDisabled(False)
        self.pb_name.setDisabled(False)

        if self.cb_time.isChecked():
            self.dt_beg.setEnabled(True)
            self.dt_end.setEnabled(True)
            self.l_beg.setEnabled(True)
            self.l_end.setEnabled(True)

        if self.cb_prot.isChecked():
            self.l_transpr.setEnabled(True)
            self.l_netpr.setEnabled(True)
            self.pt_transpr.setEnabled(True)
            self.pt_netpr.setEnabled(True)
            self.pb_transpr.setEnabled(True)
            self.pb_netpr.setEnabled(True)

        if self.cb_addr.isChecked():
            self.pt_addr.setEnabled(True)
            self.pb_addr.setEnabled(True)

    def merge_it_motherFucker(self):
        #if self.radiobutton_3.isChecked():
        #    self.pt_log2.appendPlainText("Выбрана директория с pcap-файлами:")
        #    self.pt_log2.appendPlainText("  " + self.le_dir2.text())
        #    self.pt_log2.appendPlainText('Просматриваем "{}"...'.format(self.le_dir2.text()))
        #    onlyfiles = [self.le_dir2.text() + '/' + f for f in listdir(self.le_dir2.text()) if
        #                 f.endswith(".pcap") or f.endswith(".pcapng") and isfile(join(self.le_dir2.text(), f))]
        #    self.pt_log2.appendPlainText(str(onlyfiles))

        #elif self.radiobutton_4.isChecked():
        self.pt_log2.appendPlainText("Выбраны pcap-файлы:")
        self.pt_log2.appendPlainText("  " + self.le_file2.text())
        onlyfiles = self.le_file2.text().split(', ')
        self.pt_log2.appendPlainText('Работаем с "{}"...'.format(onlyfiles))

        merge_file_out = self.le_name2.text()
        if (merge_file_out.endswith(".pcap") or merge_file_out.endswith(".pcapng")) == False:
            merge_file_out = merge_file_out + ".pcap"

        self.pt_log2.appendPlainText("Сохранить в:")
        self.pt_log2.appendPlainText("  " + merge_file_out)
        self.pt_log2.appendPlainText("")

        merge.mergecap(onlyfiles, merge_file_out)
Esempio n. 5
0
class Setting(QWidget, Ui_widget_setting):
    signal_core_number = pyqtSignal(int)
    signal_suspend_status = pyqtSignal(bool)
    signal_waiting_min = pyqtSignal(int)
    signal_schedule_status = pyqtSignal(bool)
    signal_cancel_plan = pyqtSignal(str)
    signal_change_language = pyqtSignal(str)

    def __init__(self, suspend, cores, schedule_status, waiting_min, language):
        super().__init__()
        self.setupUi(self)
        # ----------init variable------------
        self.suspend = suspend
        self.cores = cores
        self.schedule_status = schedule_status
        self.waiting_min = waiting_min
        self.language = language
        self.language_list = ['English', 'Chinese']
        # ----------init widget--------------
        self.label_suspend = QTreeWidgetItem()
        self.checkbox_suspend = QCheckBox()
        self.label_cores = QTreeWidgetItem()
        self.edit_cores = QSpinBox()
        self.label_plan = QTreeWidgetItem()
        self.edit_plan_datetime = QDateTimeEdit()
        self.label_about = QTreeWidgetItem()
        self.label_language = QTreeWidgetItem()
        self.combobox_lauguage = QComboBox()
        # -----------init function----------------
        self.ui_set()
        self.btn()
        self.init_data_show()
        self.self_translate(language)
        self.show()

    def btn(self):
        self.tree_setting.itemClicked.connect(self.effect_expand)
        self.tree_setting.itemChanged.connect(self.enable_schedule)
        self.combobox_lauguage.activated.connect(self.choose_language)
        self.checkbox_suspend.stateChanged.connect(self.change_suspend_status)

    def ui_set(self):
        # style
        self.setStyleSheet(
            "QSpinBox{border:1.5px solid #778899;border-radius:4px; padding:2px 2px}"
            "QDateTimeEdit{border:1.5px solid #778899;border-radius:4px; padding:2px 2px}"
        )
        self.tree_setting.setColumnWidth(0, 180)
        self.tree_setting.expandItem(self.tree_setting.topLevelItem(0))
        self.tree_setting.topLevelItem(1).setCheckState(1, 0)
        self.edit_cores.setMaximumSize(50, 25)
        self.edit_cores.setContentsMargins(0, 4, 0, 0)
        self.edit_cores.setMinimum(1)
        self.edit_cores.setMaximum(132)
        self.label_plan.setDisabled(True)
        self.edit_plan_datetime.setMaximumSize(135, 28)
        self.edit_plan_datetime.setDisabled(True)
        self.combobox_lauguage.setMaximumSize(135, 28)
        self.combobox_lauguage.addItems(self.language_list)
        self.combobox_lauguage.setCurrentText(self.language)

        # function
        self.add_tree_item(0, self.label_suspend, "暂停队列",
                           self.checkbox_suspend)
        self.add_tree_item(0, self.label_cores, "使用核数", self.edit_cores)
        self.add_tree_item(1, self.label_plan, "计划启动于",
                           self.edit_plan_datetime)
        self.add_tree_item(2, self.label_language, "语言选择",
                           self.combobox_lauguage)

    def add_tree_item(self, top_level_index, label, label_name, input_edit):
        label.setText(0, label_name)
        self.tree_setting.topLevelItem(top_level_index).addChild(label)
        self.tree_setting.setItemWidget(label, 1, input_edit)

    def effect_expand(self, item, column):
        index = self.tree_setting.indexOfTopLevelItem(item)
        if index >= 0:
            if item.isExpanded():
                item.setExpanded(False)
            else:
                item.setExpanded(True)

    def enable_schedule(self, item, column):
        index = self.tree_setting.indexOfTopLevelItem(item)
        if index == 1:
            check_state = item.checkState(column)
            self.schedule_status = bool(check_state)
            self.label_plan.setDisabled(2 - check_state)
            self.edit_plan_datetime.setEnabled(check_state)
            item.setExpanded(2 - check_state)
            self.reset_date_edit()
            self.suspend = self.checkbox_suspend.checkState()
            self.checkbox_suspend.setCheckState(self.suspend + check_state)
            self.checkbox_suspend.setDisabled(check_state)

    def init_data_show(self):
        self.edit_cores.setValue(self.cores)
        self.checkbox_suspend.setCheckState(self.suspend * 2)
        if self.schedule_status:
            self.tree_setting.topLevelItem(1).setCheckState(1, 2)
            self.label_plan.setDisabled(False)
            self.edit_plan_datetime.setEnabled(True)
            self.tree_setting.topLevelItem(1).setExpanded(True)
            waiting_seconds = self.waiting_min * 60
            self.edit_plan_datetime.setDisplayFormat("yyyy/MM/dd HH:mm")
            self.edit_plan_datetime.setDateTime(
                QDateTime.currentDateTime().addSecs(waiting_seconds))
        else:
            self.reset_date_edit()

    def reset_date_edit(self):
        self.edit_plan_datetime.setDisplayFormat("yyyy/MM/dd HH:mm")
        self.edit_plan_datetime.setDateTime(QDateTime.currentDateTime())
        self.edit_plan_datetime.setMinimumDateTime(QDateTime.currentDateTime())
        self.edit_plan_datetime.setMaximumDateTime(
            QDateTime.currentDateTime().addDays(5))
        self.edit_plan_datetime.setCalendarPopup(True)

    def change_suspend_status(self, status):
        self.suspend = bool(status)

    def plan_start(self):
        curr_time = QDateTime.currentSecsSinceEpoch()
        schedule_time = self.edit_plan_datetime.dateTime().toSecsSinceEpoch()
        self.waiting_min = int(round((schedule_time - curr_time) / 60, 0))
        print('waiting min', self.waiting_min)
        self.signal_waiting_min.emit(self.waiting_min)

    def choose_language(self):
        language = self.combobox_lauguage.currentText()
        self.signal_change_language.emit(language)
        self.self_translate(language)

    def self_translate(self, language):
        if language == 'English':
            self.label_suspend.setText(0, 'Suspend next')
            self.label_cores.setText(0, 'Threads number')
            self.label_plan.setText(0, 'Scheduled in')
            self.label_language.setText(0, 'Language')
        else:
            self.label_suspend.setText(0, "暂停队列")
            self.label_cores.setText(0, "使用核数")
            self.label_plan.setText(0, "计划启动于")
            self.label_language.setText(0, "语言选择")
        self.retranslateUi(self)

    def closeEvent(self, event):
        self.cores = self.edit_cores.value()
        suspend_status = self.checkbox_suspend.checkState()
        self.signal_core_number.emit(self.cores)
        self.signal_schedule_status.emit(self.schedule_status)
        if self.schedule_status:
            self.plan_start()
        else:
            self.signal_cancel_plan.emit(' ')
        self.signal_suspend_status.emit(bool(suspend_status))
        self.close()
Esempio n. 6
0
class SliceWidget(QWidget):
    """Custom widget to slice data"""
    # Signals
    sliceTimes = pyqtSignal(str, str)

    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        """Layout and main functionalities"""

        # Labels
        slice_label = QLabel("Slicing")
        start_label = QLabel("Start: ")
        end_label = QLabel("End: ")

        # DateTimeEdit
        self.start_date_time_edit = QDateTimeEdit()
        self.end_date_time_edit = QDateTimeEdit()

        # Buttons
        apply_button = QPushButton("Apply")
        apply_button.clicked.connect(self.send_times)
        hide_button = QPushButton("Hide")
        hide_button.clicked.connect(self.hide)

        # Layouts
        # - Horizontal for start
        h_start = QHBoxLayout()
        h_start.addWidget(start_label)
        h_start.addWidget(self.start_date_time_edit)
        # - Horizontal for end
        h_end = QHBoxLayout()
        h_end.addWidget(end_label)
        h_end.addWidget(self.end_date_time_edit)

        # - Vertical for self
        v_widget = QVBoxLayout()
        v_widget.addWidget(slice_label)
        v_widget.addLayout(h_start)
        v_widget.addLayout(h_end)
        v_widget.addWidget(apply_button)
        v_widget.addWidget(hide_button)
        self.setLayout(v_widget)

    def send_times(self):
        """It emits a signal with start and end dates"""
        debug = True
        if debug:
            print("- In SliceWidget.send_times()")

        start = self.start_date_time_edit.dateTime()
        end = self.end_date_time_edit.dateTime()
        start_string = start.toString("yyyyMMddhhmmss")
        end_string = end.toString("yyyyMMddhhmmss")

        if debug:
            print("sliceTimes emit:", start_string, end_string)

        self.sliceTimes.emit(start_string, end_string)

    def refresh(self, start, end):
        """It refresh the parameters of self.start_date_time_edit and
        self.end_date_time_edit"""
        self.start_date_time_edit.setMinimumDateTime(start)
        self.start_date_time_edit.setMaximumDateTime(end)
        self.start_date_time_edit.setDateTime(start)
        self.end_date_time_edit.setMinimumDateTime(start)
        self.end_date_time_edit.setMaximumDateTime(end)
        self.end_date_time_edit.setDateTime(end)
Esempio n. 7
0
class EventController(QWidget):
    def __init__(self, parent=None, default_style='Fusion'):
        super(EventController, self).__init__(parent)

        # main window attribute
        self.setGeometry(300, 100, 800, 800)
        self.setWindowTitle('Event controller')
        QApplication.setStyle(QStyleFactory.create(default_style))

        # needed information
        self.course_list = []
        self.event_list = []

        # call google api
        self.google_cal = GoogleApi('calendar', 'v3')
        self.attendee = []

        # create groups to control widgets position
        self.create_course_group()

        # set style
        style_layout = QHBoxLayout()
        style_label = QLabel('Style:')
        # QLabel.setBuddy

        style_combo = QComboBox()
        style_combo.addItems(QStyleFactory.keys())
        style_combo.activated[str].connect(self.change_style)

        # set style combo box index
        style_index = QStyleFactory.keys()
        style_index = style_index.index(default_style)
        style_combo.setCurrentIndex(style_index)

        style_layout.addWidget(style_label)
        style_layout.addWidget(style_combo)
        style_layout.addStretch(1)

        # set submit button
        submit_layout = QHBoxLayout()
        
        submit_btn = QPushButton('Submit')
        submit_btn.clicked.connect(self.submit_event)

        clean_btn = QPushButton('Clean')
        clean_btn.clicked.connect(self.clean_all)

        submit_layout.addStretch(1)
        submit_layout.addWidget(submit_btn)
        submit_layout.addWidget(clean_btn)

        # set main layout
        main_layout = QGridLayout()
        main_layout.addLayout(style_layout, 0, 0, 1, 2)
        main_layout.addWidget(self.course_group, 1, 0)
        main_layout.addLayout(submit_layout, 2, 0, 1, 2)

        self.setLayout(main_layout)

    def change_style(self, style_name):
        QApplication.setStyle(QStyleFactory.create(style_name))
        QApplication.setPalette(QApplication.style().standardPalette())

    def submit_event(self):
        course_name = self.course_combo.currentText()
        event_type = self.event_combo.currentText()
        desc = self.desc_line_edit.text()

        event_info = f'{course_name}-{event_type}{desc}'
        print(event_info, end=' ')

        start_time = self.start_datetime.dateTime().toString(Qt.ISODate)[:-3]
        end_time = self.end_datetime.dateTime().toString(Qt.ISODate)[:-3]

        print(f'{start_time} -- {end_time}')
        self.google_cal.add_event(event_info, start_time=start_time, event_time=end_time, attendees=self.attendee)

    def clean_all(self):
        """
        reset all parameter
        """
        # reset course_group
        self.course_combo.setCurrentIndex(0)
        self.event_combo.setCurrentIndex(0)
        
        # reset desc line edit
        self.desc_line_edit.clear()

        # reset start
        self.start_datetime.setDateTime(QDateTime.currentDateTime())

        # reset terminal time
        self.end_datetime.setDate(QDate.currentDate())
        self.end_datetime.setTime(QTime(23, 59))
        

    def create_course_group(self):
        self.course_group = QGroupBox('course group')

        self.course_list.extend(['ML', 'DL', 'CD'])
        
        self.event_list.extend(['HW', 'assignment', 'exam', 'lab', 'midterm', 'final'])

        # course name block
        course_layout = QVBoxLayout()
        course_label = QLabel('Course name')

        self.course_combo = QComboBox()
        self.course_combo.addItems(self.course_list)

        # course_layout.addStretch(1)
        course_layout.addWidget(course_label)
        course_layout.addWidget(self.course_combo)
        course_layout.addStretch(1)

        # event type block
        event_layout = QVBoxLayout()
        event_label = QLabel('Event type')

        self.event_combo = QComboBox()
        self.event_combo.addItems(self.event_list)

        # event_layout.addStretch(1)
        event_layout.addWidget(event_label)
        event_layout.addWidget(self.event_combo)
        event_layout.addStretch(1)

        # event description
        desc_layout = QVBoxLayout()
        desc_label = QLabel('Description')

        self.desc_line_edit = QLineEdit()
        self.desc_line_edit.setMaxLength(5)

        # desc_layout.addStretch(1)
        desc_layout.addWidget(desc_label)
        desc_layout.addWidget(self.desc_line_edit)
        desc_layout.addStretch(1)

        # start datetime block
        start_layout = QVBoxLayout()
        start_label = QLabel('Start time')

        self.start_datetime = QDateTimeEdit()
        self.start_datetime.setCalendarPopup(True)
        self.start_datetime.setMinimumDateTime(QDateTime.currentDateTime())
        self.start_datetime.dateChanged.connect(self.datetime_synch)

        # start_layout.addStretch(1)
        start_layout.addWidget(start_label)
        start_layout.addWidget(self.start_datetime)
        start_layout.addStretch(1)

        # end datetime block
        end_layout = QVBoxLayout()
        end_label = QLabel('Terminate time')

        self.end_datetime = QDateTimeEdit()
        self.end_datetime.setCalendarPopup(True)
        self.end_datetime.setMinimumDate(QDate.currentDate())
        self.end_datetime.setTime(QTime(23, 59))

        # end_layout.addStretch(1)
        end_layout.addWidget(end_label)
        end_layout.addWidget(self.end_datetime)
        end_layout.addStretch(1)

        # layout box
        layout = QHBoxLayout()
        layout.addLayout(course_layout)
        layout.addLayout(event_layout)
        layout.addLayout(desc_layout)
        layout.addLayout(start_layout)
        layout.addLayout(end_layout)
        layout.addStretch(1)
        
        self.course_group.setLayout(layout)

    # change end datetime binding to start_datetime
    def datetime_synch(self, date):

        self.end_datetime.setDate(date)
        self.end_datetime.setTime(
            QTime(23, 59)
        )
Esempio n. 8
0
class MyForm(QMainWindow):
    zoom = 0
    pos = None
    constellation = None
    step = 0
    rotation = False
    coordChange = False

    def __init__(self, sky):
        super().__init__()

        self.sky = sky
        self.initUI()

    def initUI(self):
        self.setStyleSheet(
            '''
            .QDateTimeEdit, .QLineEdit {
            background: rgbs(0, 0, 0, 0.5);
            color: #DDDDDD;
            border: 1px solid #5A5A5A;
            border-radius: 5;
            selection-color: #0a214c; 
            selection-background-color: #C19A6B;}
            ''')

        self.initEditors()
        self.setFocusPolicy(Qt.ClickFocus)
        self.setGeometry(300, 300, self.sky.width, self.sky.height)
        self.setWindowTitle('Starry Sky')
        self.timer = QBasicTimer()
        self.timer.start(50, self)
        self.show()

    def initEditors(self):
        self.datetime = QDateTimeEdit(self)
        self.datetime.setFocusPolicy(Qt.ClickFocus)
        self.datetime.setGeometry(30, 10, 138, 30)
        self.datetime.setDisplayFormat('dd.MM.yyyy HH:mm')
        self.datetime.setMaximumDateTime(QDateTime.fromString(
            '31.12.2099 23:59:59', 'dd.MM.yyyy HH:mm'))
        self.datetime.setMinimumDateTime(QDateTime.fromString(
            '01.01.2000 00:00:00', 'dd.MM.yyyy HH:mm'))
        self.datetime.setDateTime(QDateTime.currentDateTime().toUTC())
        self.datetime.dateTimeChanged.connect(self.dateTimeChanged)
        self.dateTimeChanged(self.datetime.dateTime())

        self.coordTheta = QLineEdit(self)
        self.coordTheta.setFocusPolicy(Qt.ClickFocus)
        self.coordTheta.setGeometry(10, 50, 85, 30)
        self.coordTheta.setInputMask('#00°00\'00"')
        self.coordTheta.setText('+90°00\'00"')
        self.coordTheta.setValidator(MyValidator(90, -90))
        self.coordTheta.textChanged.connect(self.coordChanged)

        self.coordPhi = QLineEdit(self)
        self.coordPhi.setFocusPolicy(Qt.ClickFocus)
        self.coordPhi.setGeometry(100, 50, 85, 30)
        self.coordPhi.setInputMask('000°00\'00"')
        self.coordPhi.setText('000°00\'00"')
        self.coordPhi.setValidator(MyValidator(360))
        self.coordPhi.textChanged.connect(self.coordChanged)

    def coordChanged(self, event):
        if self.coordChanged:
            self.coordChanged = False
            return
        self.sky.change_direction(
            str(self.coordTheta.text()), str(self.coordPhi.text()))
        self.repaint()

    def dateTimeChanged(self, event):
        self.sky.set_angle(event.toMSecsSinceEpoch() -
                           MSecsSinceEpoh + event.offsetFromUtc() * 1000)

    def timerEvent(self, e):
        self.step += 1
        if self.rotation:
            self.sky.inc_angle()
            self.datetime.setDateTime(self.datetime.dateTime().addMSecs(45000))
        self.repaint()

    def paintEvent(self, e):
        qp = MyPainter()
        qp.begin(self)
        qp.setBrush(QBrush(Qt.SolidPattern))
        qp.drawRect(0, 0, self.size().width(), self.size().height())
        self.drawPoints(qp)
        self.drawLabels(qp)
        qp.end()

    def drawPoints(self, qp):
        for star in self.sky.get_stars():
            color = QColor(*colors[star.color])
            pos = self.get_gradient_position(star)
            if star.constellation == self.constellation:
                qp.drawStar(star.x, star.y, color, star.r + 3, pos)
                if star.letter:
                    qp.drawLetter(star.x, star.y, color, star.letter)
            else:
                qp.drawStar(star.x, star.y, color, star.r, pos)

    def drawLabels(self, qp):
        if self.sky.in_pole():
            return
        qp.setPen(QColor(255, 255, 255))
        for coord, label in zip(self.sky.get_labels(), labels):
            qp.drawText(coord.x, coord.y, label)

    def wheelEvent(self, event):
        self.zoom += event.angleDelta().y()
        self.sky.zoom(self.zoom)
        self.repaint()

    def refresh_coord(self, theta, phi):
        self.coordChanged = True
        self.coordTheta.setText(self.to_text(theta))
        self.coordChanged = True
        self.coordPhi.setText(self.to_text(phi))

    def to_text(self, angle):
        integer = int(angle)
        angle %= 1
        angle *= 60
        minute = int(angle)
        angle %= 1
        angle *= 60
        secunde = int(angle)
        return '{0:03d}°{1:02d}\'{2:02d}\'\''.format(integer, minute, secunde)

    def get_gradient_position(self, star):
        return positions[int(star.m * 100 + self.step) % len(positions)]

    def get_delta_in_fract(self, pos):
        size = self.size()
        delta = self.pos - pos
        return delta.x() / size.width(), delta.y() / size.height()

    def resizeEvent(self, event):
        self.sky.resize(Point(self.size().width(), self.size().height()))
        self.repaint()

    def mousePressEvent(self, event):
        self.pos = event.pos()

    def mouseMoveEvent(self, event):
        if event.buttons() == Qt.RightButton:
            self.sky.rotate_screen(
                *map(Point.create_from_QPoint, (event.pos(), self.pos)))
        elif event.buttons() == Qt.LeftButton:
            phi, theta = self.sky.rotate_camera(
                *self.get_delta_in_fract(event.pos()))
            self.refresh_coord(phi, theta)
        else:
            return
        self.pos = event.pos()
        self.repaint()

    def mouseDoubleClickEvent(self, event):
        if event.buttons() == Qt.LeftButton:
            star = self.sky.get_nearest_star(
                Point.create_from_QPoint(event.pos()))
            if star:
                self.constellation = star.constellation
            else:
                self.constellation = None
        self.repaint()

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_P:
            self.rotation ^= 1
            return
        if event.key() == Qt.Key_Escape:
            self.constellation = None
            return
        if event.key() == Qt.Key_Left:
            phi, theta = self.sky.rotate_camera(-0.1, 0)
        if event.key() == Qt.Key_Right:
            phi, theta = self.sky.rotate_camera(0.1, 0)
        if event.key() == Qt.Key_Up:
            phi, theta = self.sky.rotate_camera(0, -0.1)
        if event.key() == Qt.Key_Down:
            phi, theta = self.sky.rotate_camera(0, 0.1)
        with suppress(UnboundLocalError):
            self.refresh_coord(phi, theta)