import configparser import os import sys from PyQt5 import QtCore, QtGui, QtWidgets # Settings class # Used to hold settings and execute read/write operations on the configuration file. class Settings: # Init # Args : None def __init__(self): if getattr(sys, 'frozen', False): self.application_path = os.path.dirname(sys.executable) elif __file__: self.application_path = os.path.dirname(__file__) if os.name == 'nt': self.file = os.path.join(self.application_path, 'config.ini') else: self.file = '/etc/openleecher/config.ini' self.fp = open(self.file) self.cfg = configparser.ConfigParser() self.cfg.read_file(self.fp) # Get # Read configuration file at section k, line v # Args : k=section, v=line def get(self, k, v): return self.cfg.get(k, v) # Write # Re-write configuration file. # Args : threads, timeout, behavior, browser, ftp, media def write(self, threads, timeout, behavior, browser, ftp, media): self.fp.close() config = configparser.ConfigParser() config.add_section("Core") config.set("Core", "threads", str(threads)) config.set("Core", "timeout", str(timeout)) config.set("Core", "behavior", str(behavior)) config.add_section("AutoOpen") config.set("AutoOpen", "browser", str(browser)) config.set("AutoOpen", "ftp", str(ftp)) config.set("AutoOpen", "media", str(media)) with open(self.file, "w") as config_file: config.write(config_file) self.fp = open(self.file, "r") self.cfg = configparser.ConfigParser() self.cfg.readfp(self.fp) # Settings Window UI class # QT class of the settings window class Ui_Settings(QtWidgets.QMainWindow): # Init # Args : settings=settings object, parent=main window def __init__(self, settings, parent=None): super(Ui_Settings, self).__init__(parent.mw) self.par = parent self.s = settings self.behaviors = \ {0: "For one address generated, one scanner is randomly picked.", 1: "A succeeded scan will trigger every other active scanners on the same address.", 2: "For every generated address, all active scanners are used."} self.setupUi(self) # Setup UI # UI creation # Args : Settings=window def setupUi(self, Settings): Settings.setObjectName("Settings") Settings.resize(500, 600) self.gridLayoutWidget = QtWidgets.QWidget(Settings) self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 10, 480, 580)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.Button_OK = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_OK.setObjectName("Button_OK") self.gridLayout.addWidget(self.Button_OK, 3, 1, 1, 1) self.Button_Cancel = QtWidgets.QPushButton(self.gridLayoutWidget) self.Button_Cancel.setObjectName("Button_Cancel") self.gridLayout.addWidget(self.Button_Cancel, 3, 2, 1, 1) self.groupBox = QtWidgets.QGroupBox(self.gridLayoutWidget) self.groupBox.setObjectName("groupBox") self.formLayoutWidget = QtWidgets.QWidget(self.groupBox) self.formLayoutWidget.setGeometry(QtCore.QRect(10, 40, 140, 220)) self.formLayoutWidget.setObjectName("formLayoutWidget") self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget) self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) self.formLayout.setContentsMargins(0, 0, 0, 0) self.formLayout.setObjectName("formLayout") self.label = QtWidgets.QLabel(self.formLayoutWidget) self.label.setObjectName("label") self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label) self.Spinbox_Threads = QtWidgets.QSpinBox(self.formLayoutWidget) self.Spinbox_Threads.setMaximum(99999) self.Spinbox_Threads.setObjectName("Spinbox_Threads") self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.Spinbox_Threads) self.label_6 = QtWidgets.QLabel(self.formLayoutWidget) self.label_6.setObjectName("label_6") self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_6) self.Spinbox_Timeout = QtWidgets.QDoubleSpinBox(self.formLayoutWidget) self.Spinbox_Timeout.setDecimals(1) self.Spinbox_Timeout.setMaximum(999999.0) self.Spinbox_Timeout.setObjectName("Spinbox_Timeout") self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.Spinbox_Timeout) self.gridLayout.addWidget(self.groupBox, 1, 0, 1, 1) self.groupBox_3 = QtWidgets.QGroupBox(self.gridLayoutWidget) self.groupBox_3.setObjectName("groupBox_3") self.formLayoutWidget_2 = QtWidgets.QWidget(self.groupBox_3) self.formLayoutWidget_2.setGeometry(QtCore.QRect(10, 40, 300, 220)) self.formLayoutWidget_2.setObjectName("formLayoutWidget_2") self.formLayout_2 = QtWidgets.QFormLayout(self.formLayoutWidget_2) self.formLayout_2.setContentsMargins(0, 0, 0, 0) self.formLayout_2.setObjectName("formLayout_2") self.label_2 = QtWidgets.QLabel(self.formLayoutWidget_2) self.label_2.setObjectName("label_2") self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_2) self.Text_Browser = QtWidgets.QLineEdit(self.formLayoutWidget_2) self.Text_Browser.setObjectName("Text_Browser") self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.Text_Browser) self.label_3 = QtWidgets.QLabel(self.formLayoutWidget_2) self.label_3.setObjectName("label_3") self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_3) self.Text_FTPCli = QtWidgets.QLineEdit(self.formLayoutWidget_2) self.Text_FTPCli.setObjectName("Text_FTPCli") self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.Text_FTPCli) self.label_5 = QtWidgets.QLabel(self.formLayoutWidget_2) self.label_5.setObjectName("label_5") self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_5) self.Text_Mediaplayer = QtWidgets.QLineEdit(self.formLayoutWidget_2) self.Text_Mediaplayer.setObjectName("Text_Mediaplayer") self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.Text_Mediaplayer) self.gridLayout.addWidget(self.groupBox_3, 1, 1, 1, 2) self.groupBox_2 = QtWidgets.QGroupBox(self.gridLayoutWidget) self.groupBox_2.setObjectName("groupBox_2") self.formLayoutWidget_4 = QtWidgets.QWidget(self.groupBox_2) self.formLayoutWidget_4.setGeometry(QtCore.QRect(10, 40, 460, 220)) self.formLayoutWidget_4.setObjectName("formLayoutWidget_4") self.formLayout_4 = QtWidgets.QFormLayout(self.formLayoutWidget_4) self.formLayout_4.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow) self.formLayout_4.setContentsMargins(0, 0, 0, 0) self.formLayout_4.setHorizontalSpacing(6) self.formLayout_4.setVerticalSpacing(2) self.formLayout_4.setObjectName("formLayout_4") self.label_4 = QtWidgets.QLabel(self.formLayoutWidget_4) self.label_4.setObjectName("label_4") self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_4) self.ComboBox_Scanmode = QtWidgets.QComboBox(self.formLayoutWidget_4) self.ComboBox_Scanmode.setObjectName("ComboBox_Scanmode") self.ComboBox_Scanmode.addItem("") self.ComboBox_Scanmode.addItem("") self.ComboBox_Scanmode.addItem("") self.formLayout_4.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.ComboBox_Scanmode) self.Label_Scanmode = QtWidgets.QLabel(self.formLayoutWidget_4) font = QtGui.QFont() font.setPointSize(9) font.setItalic(True) self.Label_Scanmode.setFont(font) self.Label_Scanmode.setObjectName("Label_Scanmode") self.Label_Scanmode.setWordWrap(True) self.formLayout_4.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.Label_Scanmode) self.gridLayout.addWidget(self.groupBox_2, 2, 0, 1, 3) self.retranslateUi(Settings) QtCore.QMetaObject.connectSlotsByName(Settings) self.handleEvents() self.loadContent() qtRectangle = Settings.frameGeometry() centerPoint = QtWidgets.QDesktopWidget().availableGeometry().center() qtRectangle.moveCenter(centerPoint) Settings.move(qtRectangle.topLeft()) # Retranslate UI # Apply language on UI # Args : Settings=QT window def retranslateUi(self, Settings): _translate = QtCore.QCoreApplication.translate Settings.setWindowTitle(_translate("Settings", "Settings")) self.Button_OK.setText(_translate("Settings", "Save")) self.Button_Cancel.setText(_translate("Settings", "Cancel")) self.groupBox.setTitle(_translate("Settings", "Core")) self.label.setText(_translate("Settings", "Threads :")) self.label_6.setText(_translate("Settings", "Timeout (s) : ")) self.groupBox_3.setTitle(_translate("Settings", "Auto-open")) self.label_2.setText(_translate("Settings", "Browser : ")) self.label_3.setText(_translate("Settings", "FTP client : ")) self.label_5.setText(_translate("Settings", "Media player :")) self.groupBox_2.setTitle(_translate("Settings", "Behaviors")) self.label_4.setText(_translate("Settings", "Scan mode : ")) self.ComboBox_Scanmode.setItemText(0, _translate("Settings", "Random")) self.ComboBox_Scanmode.setItemText(1, _translate("Settings", "Intelligent")) self.ComboBox_Scanmode.setItemText(2, _translate("Settings", "Everything")) self.Label_Scanmode.setText(_translate("Settings", "TextLabel")) # Handle events # Link UI events to functions. # Args : None def handleEvents(self): self.Button_Cancel.clicked.connect(self.onButtonCancel) self.Button_OK.clicked.connect(self.onButtonOK) self.ComboBox_Scanmode.currentIndexChanged.connect(self.onScanmode) # Load content # Fill UI with values from the core. # Args : None def loadContent(self): self.Spinbox_Threads.setValue(int(self.s.get('Core', 'threads'))) self.Spinbox_Timeout.setValue(int(self.s.get('Core', 'timeout'))) self.ComboBox_Scanmode.setCurrentIndex(int(self.s.get('Core', 'behavior'))) self.Text_Browser.setText(self.s.get('AutoOpen', 'browser')) self.Text_FTPCli.setText(self.s.get('AutoOpen', 'ftp')) self.Text_Mediaplayer.setText(self.s.get('AutoOpen', 'media')) self.Label_Scanmode.setText(self.behaviors[self.ComboBox_Scanmode.currentIndex()]) # Save content # Write a new configuration file based on this window's values. # Args : None def saveContent(self): self.s.write(int(self.Spinbox_Threads.value()), int(self.Spinbox_Timeout.value()), int(self.ComboBox_Scanmode.currentIndex()), self.Text_Browser.text(), self.Text_FTPCli.text(), self.Text_Mediaplayer.text()) # On button OK # Called when the "OK" button is pressed. # Args : None def onButtonOK(self): self.saveContent() if self.par.ol.core.running: self.par.actionStartStop() self.par.ol.core.reboot() self.close() # On button Cancel # Called when the "Cancel" button is pressed. # Args : None def onButtonCancel(self): self.close() # On scan mode # Called when the scan mode combobox selection changed. # Args : None def onScanmode(self): self.Label_Scanmode.setText(self.behaviors[self.ComboBox_Scanmode.currentIndex()])