diff --git a/gui.py b/gui.py index 286d90f..e4b98e6 100644 --- a/gui.py +++ b/gui.py @@ -44,6 +44,20 @@ if len(model_names) == 0: print("No tesseract models found at", MODELS_PATH, "!", file=sys.stderr) sys.exit(0) +class UPCWorker(QObject): + finished = pyqtSignal() + update_name = pyqtSignal(list) + + def __init__(self, upcList): + super().__init__() + self.upcList = upcList + + def get_items_name(self): + for upc in self.upcList: + name = get_name_from_upc(upc[1]) + self.update_name.emit([upc[0], name]) + self.finished.emit() + class coin_app(QtWidgets.QMainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) @@ -70,6 +84,45 @@ class coin_app(QtWidgets.QMainWindow): self.items = None + self.upcCheckTimer = QTimer(self) + self.upcCheckTimer.timeout.connect(self.pushUPCToThread) + self.upcCheckTimer.start(1500) + print("Initialized timer!") + + self.upcThread = QThread() + self.upcWorker = None + self.upcCheckList = [] + + def pushUPCToThread(self): + if len(self.upcCheckList) > 0 and self.upcWorker is None: + self.upcWorker = UPCWorker(self.upcCheckList) + self.upcWorker.moveToThread(self.upcThread) + + self.upcWorker.update_name.connect(self.updateItemName) + self.upcWorker.finished.connect(self.collectUPCWorker) + self.upcThread.finished.connect(self.collectUPCThread) + + self.upcThread.started.connect(self.upcWorker.get_items_name) + self.upcThread.start() + + print("Lookup thread started!") + + self.upcCheckList = [] + + def collectUPCWorker(self): + self.upcWorker.deleteLater() + self.upcWorker = None + + def collectUPCThread(self): + self.upcThread.deleteLater() + + def updateItemName(self, name): + itemName = QStandardItem(name[1]) + itemName.setTextAlignment(Qt.AlignmentFlag.AlignCenter) + self.items.setItem(name[0], TABLE_COL_NAME, itemName) + self.itemsTable.resizeColumnToContents(TABLE_COL_NAME) + self.itemsTable.resizeRowToContents(name[0]) + def update_now(self, value): self.model = value print("Model selected as:", self.model) @@ -177,29 +230,19 @@ class coin_app(QtWidgets.QMainWindow): button = self.sender() row = self.itemsTable.indexAt(button.pos()).row() upc = self.items.item(row, TABLE_COL_UPC).text() + self.upcCheckList.append([row, upc]) print("Started getting name of UPC:", upc) - name = get_name_from_upc(upc, max_tries=3) - print("Got name", name, "from UPC:", upc) - item = QStandardItem(name) - item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) - self.items.setItem(row, TABLE_COL_NAME, item) - self.itemsTable.resizeColumnToContents(TABLE_COL_NAME) - self.itemsTable.resizeRowToContents(row) + self.statusBar().showMessage("Started getting name of UPC: " + upc) + self.pushUPCToThread() def get_all(self): - for i in range(1, self.items.rowCount()): - + for i in range(1, self.items.rowCount()): if self.items.item(i, TABLE_COL_NAME) is None or self.items.item(i, TABLE_COL_NAME).text() == "N/A": upc = self.items.item(i, TABLE_COL_UPC).text() print("Started getting name of UPC:", upc) self.statusBar().showMessage("Started getting name of UPC: " + upc) - name = get_name_from_upc(upc, wait_interval=1, max_tries=30) - print("Got name", name, "from UPC:", upc) - item = QStandardItem(name) - item.setTextAlignment(Qt.AlignmentFlag.AlignCenter) - self.items.setItem(i, TABLE_COL_NAME, item) - self.itemsTable.resizeColumnToContents(TABLE_COL_NAME) - self.itemsTable.resizeRowsToContents() + self.upcCheckList.append([i, upc]) + self.pushUPCToThread() def del_row(self): button = self.sender() diff --git a/upc.py b/upc.py index c73488d..5c9826a 100644 --- a/upc.py +++ b/upc.py @@ -1,10 +1,11 @@ import time from seleniumbase import Driver +# from selenium import webdriver driver = Driver(uc=True) driver.implicitly_wait(5) -def get_name_from_upc(upc: str, wait_interval=3, max_tries=10) -> str: +def get_name_from_upc(upc: str, wait_interval=1, max_tries=30) -> str: url = "https://stocktrack.ca/wm/index.php?s=wm&upc=" + upc driver.get(url)