Example #1
0
class MainWindow(QMainWindow):

    """ This is the Main Window class for the proxy finder tool. """

    def __init__(self):

        super().__init__()

        self.setWindowTitle("Proxy Finder Tool")

        self.resize(250, 300)

        # Attached SQL Connection
        self.connection = None

        self.icon = QIcon(QPixmap("./globe.png"))
        self.setWindowIcon(self.icon)

        self.mainSettings()

        self.stacked_layout = QStackedLayout()

        self.mainLayout()

        self.connections()

        self.widget = QWidget()
        self.widget.setLayout(self.stacked_layout)

        self.setCentralWidget(self.widget)

    def mainSettings(self):

        self.refreshButton = QPushButton("Refresh")
        self.exportList = QPushButton("Save List")

        self.statusBar = QStatusBar()

        self.setStatusBar(self.statusBar)

        self.menuBar = QMenuBar()

        # menus for the main menu bar
        self.databaseMenu = self.menuBar.addMenu("Database")
        self.proxyMenu = self.menuBar.addMenu("Proxies")
        self.helpMenu = self.menuBar.addMenu("Help")

        # actions
        self.getList = QAction("Get List", self)
        self.saveList = QAction("Save List", self)

        self.openDatabase = QAction("Open Database", self)
        self.newDatabase = QAction("New Database", self)
        self.closeDatabase = QAction("Close Database", self)
        self.closeDatabase.setEnabled(False)

        self.about = QAction("About", self)

        # add actions to menus
        self.proxyMenu.addAction(self.getList)
        self.proxyMenu.addAction(self.saveList)

        self.databaseMenu.addAction(self.newDatabase)
        self.databaseMenu.addAction(self.openDatabase)
        self.databaseMenu.addAction(self.closeDatabase)

        self.helpMenu.addAction(self.about)

        # set the menu bar
        self.setMenuBar(self.menuBar)

    def mainLayout(self):

        # this is the main initial layout
        self.resultsTable = QListWidget()

        # current database

        self.currentDatabase = QLabel("Current Database: ")
        self.databaseNameLabel = QLabel("None")

        self.currentDbLayout = QHBoxLayout()
        self.currentDbLayout.addWidget(self.currentDatabase)
        self.currentDbLayout.addWidget(self.databaseNameLabel)

        self.currentDbWidget = QWidget()
        self.currentDbWidget.setLayout(self.currentDbLayout)

        # buttons

        self.btnLayout = QHBoxLayout()

        self.getListBtn = QPushButton("Get List")
        self.saveListBtn = QPushButton("Save List")
        self.exportListBtn = QPushButton("Export List")

        self.btnLayout.addWidget(self.getListBtn)
        self.btnLayout.addWidget(self.saveListBtn)
        self.btnLayout.addWidget(self.exportListBtn)

        self.btnWidget = QWidget()
        self.btnWidget.setLayout(self.btnLayout)

        # Main Layout

        self.mainVertical = QVBoxLayout()
        self.mainVertical.addWidget(self.currentDbWidget)
        self.mainVertical.addWidget(self.resultsTable)
        self.mainVertical.addWidget(self.btnWidget)

        self.disableProxies()
        # Main Widget

        self.mainWidget = QWidget()
        self.mainWidget.setLayout(self.mainVertical)

        # Add to Stacked Layout
        self.stacked_layout.addWidget(self.mainWidget)

    def createNewDatabase(self):

        path = QFileDialog.getSaveFileName()

        if self.connection:
            self.connection.close_database()

        self.connection = SQLConnection(path)
        self.connection.create_database()

        self.databaseNameLabel.setText(path)

        self.closeDatabase.setEnabled(True)
        self.openDatabase.setEnabled(False)
        self.newDatabase.setEnabled(False)

        self.statusBar.showMessage("Database has been created.")

        self.enableProxies()

        self.db_open()

    def getProxies(self):
        if self.connection == None:
            self.statusBar.showMessage("No Database Open!")
        else:
            thread = ProxyList()
            thread.complete.connect(self.populate_db)
            thread.start()

    def enableProxies(self):
        self.getList.setEnabled(True)
        self.saveList.setEnabled(True)

        self.getListBtn.setEnabled(True)
        self.saveListBtn.setEnabled(True)
        self.exportListBtn.setEnabled(True)

    def populate_db(self, results):

        self.statusBar.showMessage("Collecting Data. Please wait...")

        for i in range(len(proxies)):
            query = self.connection.addProxy(proxies[i])
            self.statusBar.showMessage("Gathering {0} of {1} proxies.".format(i + 1, len(proxies)))

        self.statusBar.showMessage("Gathering Complete!")

    def populate_table_init(self):

        numberOfProxies = self.connection.numberOfProxies()

        if num > 0:
            results = self.connection.getAllProxies()
        else:
            self.statusBar.showMessage("No Proxies in Database.")

    def db_open(self):

        numberOfProxies = self.connection.numberOfProxies()
        num = int(numberOfProxies)
        print(num)
        if num > 0:
            self.connection.getAllProxies()
        else:
            self.statusBar.showMessage("No Proxies in Database.")

    def disableProxies(self):
        self.getList.setEnabled(False)
        self.saveList.setEnabled(False)

        self.getListBtn.setEnabled(False)
        self.saveListBtn.setEnabled(False)
        self.exportListBtn.setEnabled(False)

    def openDatabaseConn(self):

        self.close_connection()

        path = QFileDialog.getOpenFileName()
        self.connection = SQLConnection(path)
        opened = self.connection.open_database()

        if opened:
            self.openDatabase.setEnabled(False)
            self.newDatabase.setEnabled(False)
            self.closeDatabase.setEnabled(True)

            self.statusBar.showMessage("Database has been opened.")
            self.databaseNameLabel.setText(path)
            self.enableProxies()
            self.db_open()

    def close_connection(self):
        if self.connection:
            self.connection.close_database()
            self.statusBar.showMessage("Database has been closed.")
            self.databaseNameLabel.setText("None")

            self.newDatabase.setEnabled(True)
            self.openDatabase.setEnabled(True)
            self.closeDatabase.setEnabled(False)

            self.connection = None

            self.disableProxies()
        else:
            self.statusBar.showMessage("No Database to close.")

    def connections(self):

        self.newDatabase.triggered.connect(self.createNewDatabase)
        self.openDatabase.triggered.connect(self.openDatabaseConn)
        self.closeDatabase.triggered.connect(self.close_connection)
        self.getListBtn.clicked.connect(self.getProxies)
        self.getList.triggered.connect(self.getProxies)