* Implemented show_progress_bar and update_progress_bar to interact with progress bars
* Added 3 progress bars to second window
* Imports little optimization

Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com>
This commit is contained in:
2024-06-16 17:52:22 +07:00
parent e9eef9f785
commit 6330a0dfa8
5 changed files with 68 additions and 65 deletions

View File

@@ -1,7 +1,6 @@
#!/usr/bin/python3 #!/usr/bin/python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QResizeEvent, QCloseEvent, QClipboard from PyQt5.QtGui import QResizeEvent, QCloseEvent, QClipboard
from PyQt5.QtWidgets import QMainWindow, QFileDialog, QMessageBox, QApplication from PyQt5.QtWidgets import QMainWindow, QFileDialog, QMessageBox, QApplication
from ast import literal_eval from ast import literal_eval

View File

@@ -5,7 +5,7 @@ from ast import literal_eval
from ctypes import CDLL from ctypes import CDLL
from os import getcwd, remove from os import getcwd, remove
from PyQt5.QtCore import Qt, QRegExp from PyQt5.QtCore import QRegExp
from PyQt5.QtGui import QRegExpValidator from PyQt5.QtGui import QRegExpValidator
from PyQt5.QtWidgets import QDialog, QFileDialog from PyQt5.QtWidgets import QDialog, QFileDialog

View File

@@ -4,8 +4,6 @@
import os import os
from ast import literal_eval from ast import literal_eval
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QProgressDialog, QApplication
from requests import get from requests import get
from dataIO import dataIO from dataIO import dataIO
@@ -56,10 +54,7 @@ def update_configs():
update_list = check_remote_hashes() update_list = check_remote_hashes()
if not update_list or len(update_list) == 0: if not update_list or len(update_list) == 0:
return return
progress = QProgressDialog("Downloading configs...", None, 0, len(update_list), flags=Qt.Window | Qt.WindowTitleHint) progress_bar = util.show_progress_bar("Download progress", "Downloading configs...", len(update_list))
progress.setWindowTitle("Download progress")
progress.setWindowModality(Qt.WindowModal)
progress.show()
for cfg in update_list: for cfg in update_list:
check_path(cfg) check_path(cfg)
response_status, response = get_response_result(github_link + cfg) response_status, response = get_response_result(github_link + cfg)
@@ -67,7 +62,5 @@ def update_configs():
remote_cfg = literal_eval(response.text) remote_cfg = literal_eval(response.text)
if dataIO.is_valid_json(cfg) or os.path.exists(cfg): if dataIO.is_valid_json(cfg) or os.path.exists(cfg):
dataIO.save_json(cfg, remote_cfg) dataIO.save_json(cfg, remote_cfg)
progress.setValue(progress.value()+1) util.update_progress_bar(progress_bar)
QApplication.processEvents() util.update_progress_bar(progress_bar, len(update_list))
progress.setValue(len(update_list))
QApplication.processEvents()

View File

@@ -1,7 +1,6 @@
#!/usr/bin/python3 #!/usr/bin/python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog from PyQt5.QtWidgets import QDialog
from .form import Ui_SecondWindow from .form import Ui_SecondWindow
from util import * from util import *
@@ -54,36 +53,39 @@ class SecondWindow(QDialog, Ui_SecondWindow):
self.ui.garage_size.addItem("Medium") self.ui.garage_size.addItem("Medium")
self.ui.garage_size.addItem("Big") self.ui.garage_size.addItem("Big")
# Dealers and agencies properties for 'ADD' button self.da_statics = {
self.add_da_dict = { "dealer": [
self.ui.dealer_add: [ self.dealers, # city_list
self.ui.dealer_edit, "unlocked_dealers:", # line_to_search
"unlocked_dealers:", self.check_dealers, # check_func
self.dealers,
"Dealership",
self.check_dealers
], ],
self.ui.agency_add: [ "agency": [
self.ui.agency_edit, self.agencies, # city_list
"unlocked_recruitments:", "unlocked_recruitments:", # line_to_search
self.agencies, self.check_agencies, # check_func
"Recruitment agency",
self.check_agencies
], ],
} }
# Dealers and agencies properties for 'ADD ALL' button
self.add_all_da_dict = { self.add_da_handlers = {
self.ui.dealer_add: [
"dealer",
self.ui.dealer_edit, # city_to_add
"Dealership", # message_variable
],
self.ui.dealer_add_all: [ self.ui.dealer_add_all: [
self.dealers, "dealer",
"unlocked_dealers:", "All dealerships unlocked.", # success_message
"All dealerships unlocked.", "Visiting dealers", # progress_message
self.check_dealers ],
self.ui.agency_add: [
"agency",
self.ui.agency_edit, # city_to_add
"Recruitment agency", # message_variable
], ],
self.ui.agency_add_all: [ self.ui.agency_add_all: [
self.agencies, "agency",
"unlocked_recruitments:", "All recruitment agencies unlocked.", # success_message
"All recruitment agencies unlocked.", "Visiting agencies", # progress_message
self.check_agencies
], ],
} }
@@ -225,11 +227,14 @@ class SecondWindow(QDialog, Ui_SecondWindow):
QMessageBox.critical(self, "Error", "You've already visited \"{}\".".format(city)) QMessageBox.critical(self, "Error", "You've already visited \"{}\".".format(city))
def add_all_cities(self): def add_all_cities(self):
all_cities = self.all_cities()
visited_cities = util.get_array_items(util.search_line("visited_cities:")) visited_cities = util.get_array_items(util.search_line("visited_cities:"))
for city in self.all_cities(): progress = util.show_progress_bar("Visiting cities", "Visiting cities...", len(all_cities)-len(visited_cities))
for city in all_cities:
if city not in visited_cities: if city not in visited_cities:
util.add_array_value(util.search_line("visited_cities:"), city) util.add_array_value(util.search_line("visited_cities:"), city)
util.add_array_value(util.search_line("visited_cities_count:"), "1") util.add_array_value(util.search_line("visited_cities_count:"), "1")
util.update_progress_bar(progress)
QMessageBox.information(self, "Success", "All cities successfully visited.") QMessageBox.information(self, "Success", "All cities successfully visited.")
self.check_cities() self.check_cities()
@@ -243,15 +248,6 @@ class SecondWindow(QDialog, Ui_SecondWindow):
self.ui.dealerships_text.append(dealer) self.ui.dealerships_text.append(dealer)
self.ui.dealerships_text.scrollToAnchor(visited_dealers[0]) self.ui.dealerships_text.scrollToAnchor(visited_dealers[0])
# def add_all_dealers(self):
# all_cities = self.all_cities()
# visited_dealers = util.get_array_items(util.search_line("unlocked_dealers:"))
# for dealer in self.dealers:
# if dealer in all_cities and dealer not in visited_dealers:
# util.add_array_value(util.search_line("unlocked_dealers:"), dealer)
# QMessageBox.information(self, "Success", "All dealerships unlocked.")
# self.check_dealers()
def check_agencies(self): def check_agencies(self):
self.ui.agencies_text.clear() self.ui.agencies_text.clear()
visited_agencies = util.get_array_items(util.search_line("unlocked_recruitments:")) visited_agencies = util.get_array_items(util.search_line("unlocked_recruitments:"))
@@ -262,25 +258,17 @@ class SecondWindow(QDialog, Ui_SecondWindow):
self.ui.agencies_text.append(agency) self.ui.agencies_text.append(agency)
self.ui.agencies_text.scrollToAnchor(visited_agencies[0]) self.ui.agencies_text.scrollToAnchor(visited_agencies[0])
# def add_all_agencies(self):
# all_cities = self.all_cities()
# visited_agencies = util.get_array_items(util.search_line("unlocked_recruitments:"))
# for agency in self.agencies:
# if agency in all_cities and agency not in visited_agencies:
# util.add_array_value(util.search_line("unlocked_recruitments:"), agency)
# QMessageBox.information(self, "Success", "All recruitment agencies unlocked.")
# self.check_agencies()
def add_da_clicked(self): def add_da_clicked(self):
da_arr = self.add_da_dict.get(self.sender()) da_arr = self.add_da_handlers.get(self.sender())
if da_arr is None: if da_arr is None:
return return
edit, line_to_search, city_list, message_variable, check_func = da_arr static_id, city_to_add, message_variable = da_arr
city_element = edit.text().lower() city_list, line_to_search, check_func = self.da_statics.get(static_id)
city_element = city_to_add.text().lower()
if not city_element: if not city_element:
QMessageBox.critical(self, "Error", "Enter city name!") QMessageBox.critical(self, "Error", "Enter city name!")
return return
edit.setText("") city_to_add.setText("")
if city_element not in city_list: if city_element not in city_list:
QMessageBox.critical(self, "Error", "There is no {} in that city.".format(message_variable.lower())) QMessageBox.critical(self, "Error", "There is no {} in that city.".format(message_variable.lower()))
elif city_element in util.get_array_items(util.search_line(line_to_search)): elif city_element in util.get_array_items(util.search_line(line_to_search)):
@@ -293,15 +281,18 @@ class SecondWindow(QDialog, Ui_SecondWindow):
check_func() check_func()
def add_all_da_clicked(self): def add_all_da_clicked(self):
da_arr = self.add_all_da_dict.get(self.sender()) da_arr = self.add_da_handlers.get(self.sender())
if da_arr is None: if da_arr is None:
return return
city_list, line_to_search, success_message, check_func = da_arr static_id, success_message, progress_message = da_arr
city_list, line_to_search, check_func = self.da_statics.get(static_id)
all_cities = self.all_cities() all_cities = self.all_cities()
array_line = util.search_line(line_to_search) array_line = util.search_line(line_to_search)
visited = util.get_array_items(array_line) visited_cities = util.get_array_items(array_line)
progress = util.show_progress_bar(progress_message, progress_message+"...", len(all_cities)-len(visited_cities))
for element in city_list: for element in city_list:
if (element in all_cities) and (element not in visited): if (element in all_cities) and (element not in visited_cities):
util.add_array_value(array_line, element) util.add_array_value(array_line, element)
util.update_progress_bar(progress)
QMessageBox.information(self, "Success", success_message) QMessageBox.information(self, "Success", success_message)
check_func() check_func()

22
util.py
View File

@@ -4,7 +4,10 @@
from os.path import isfile from os.path import isfile
from re import search, match from re import search, match
# from re import search, match, sub # from re import search, match, sub
from PyQt5.QtWidgets import QMessageBox from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
QMessageBox, QProgressDialog, QApplication
)
from hashlib import md5 from hashlib import md5
from statics import hash_chunk_size from statics import hash_chunk_size
@@ -32,6 +35,23 @@ class CustomFuncs:
hash_md5.update(chunk) hash_md5.update(chunk)
return hash_md5.hexdigest() return hash_md5.hexdigest()
@staticmethod
def show_progress_bar(title, text, length):
if (not title) or (not text) or (not length) or (length <= 0):
return
progress_bar = QProgressDialog(text, None, 0, length, flags=Qt.Window | Qt.WindowTitleHint)
progress_bar.setWindowTitle(title)
progress_bar.setWindowModality(Qt.WindowModal)
progress_bar.show()
return progress_bar
@staticmethod
def update_progress_bar(progress_bar, value=1):
if not progress_bar:
return
progress_bar.setValue(progress_bar.value() + value)
QApplication.processEvents()
# Stock functions # Stock functions
def search_line(self, term, start=0, cancel=r"this_string_must_not_exist"): def search_line(self, term, start=0, cancel=r"this_string_must_not_exist"):
if search(term, self.lines[start]): if search(term, self.lines[start]):