This commit is contained in:
faroukbmiled 2023-08-25 20:08:08 +01:00
parent 6743d456f8
commit 5a442cc4e9
2 changed files with 92 additions and 24 deletions

View File

@ -20,7 +20,7 @@ import io
import os import os
import re import re
VERSION = "v0.2.1" VERSION = "v0.2.2"
GITHUB_REPO = "faroukbmiled/BOIIIWD" GITHUB_REPO = "faroukbmiled/BOIIIWD"
LATEST_RELEASE_URL = "https://github.com/faroukbmiled/BOIIIWD/releases/latest/download/Release.zip" LATEST_RELEASE_URL = "https://github.com/faroukbmiled/BOIIIWD/releases/latest/download/Release.zip"
UPDATER_FOLDER = "update" UPDATER_FOLDER = "update"
@ -28,13 +28,18 @@ CONFIG_FILE_PATH = "config.ini"
RESOURCES_DIR = os.path.join(os.path.dirname(__file__), 'resources') RESOURCES_DIR = os.path.join(os.path.dirname(__file__), 'resources')
# fuck it we ball, ill get rid of globals when i finish everything cant be bothered rn # fuck it we ball, ill get rid of globals when i finish everything cant be bothered rn
global stopped, steampid, console, clean_on_finish, continuous, estimated_progress global stopped, steampid, console, clean_on_finish, continuous, estimated_progress, steam_fail_counter, \
steam_fail_counter_toggle, steam_fail_number, steamcmd_reset
steampid = None steampid = None
stopped = False stopped = False
console = False console = False
clean_on_finish = True clean_on_finish = True
continuous = True continuous = True
estimated_progress = True estimated_progress = True
steam_fail_counter_toggle = True
steam_fail_counter = 0
steam_fail_number = 10
steamcmd_reset = False
# Start Helper Functions # Start Helper Functions
def cwd(): def cwd():
@ -50,6 +55,14 @@ def check_config(name, fallback=None):
return config.get("Settings", name, fallback=fallback) return config.get("Settings", name, fallback=fallback)
return config.get("Settings", name, fallback="on") return config.get("Settings", name, fallback="on")
def save_config(name, value):
config = configparser.ConfigParser()
config.read(CONFIG_FILE_PATH)
if name and value:
config.set("Settings", name, value)
with open(CONFIG_FILE_PATH, "w") as config_file:
config.write(config_file)
def check_custom_theme(theme_name): def check_custom_theme(theme_name):
if os.path.exists(os.path.join(cwd(), theme_name)): if os.path.exists(os.path.join(cwd(), theme_name)):
return os.path.join(cwd(), theme_name) return os.path.join(cwd(), theme_name)
@ -63,6 +76,7 @@ ctk.set_appearance_mode(check_config("appearance", "Dark")) # Modes: "System" (
try: try:
ctk.set_default_color_theme(check_custom_theme(check_config("theme", fallback="boiiiwd_theme.json"))) ctk.set_default_color_theme(check_custom_theme(check_config("theme", fallback="boiiiwd_theme.json")))
except: except:
save_config("theme", "boiiiwd_theme.json")
ctk.set_default_color_theme(os.path.join(RESOURCES_DIR, "boiiiwd_theme.json")) ctk.set_default_color_theme(os.path.join(RESOURCES_DIR, "boiiiwd_theme.json"))
def get_latest_release_version(): def get_latest_release_version():
@ -204,7 +218,7 @@ def create_default_config():
config.write(config_file) config.write(config_file)
def run_steamcmd_command(command, self, map_folder): def run_steamcmd_command(command, self, map_folder):
global steampid, stopped global steampid, stopped, steam_fail_counter, steam_fail_number, steamcmd_reset
steamcmd_path = get_steamcmd_path() steamcmd_path = get_steamcmd_path()
show_console = subprocess.CREATE_NO_WINDOW show_console = subprocess.CREATE_NO_WINDOW
if console: if console:
@ -228,6 +242,18 @@ def run_steamcmd_command(command, self, map_folder):
return process.returncode return process.returncode
process.communicate() process.communicate()
steam_fail_counter = steam_fail_counter + 1
if steam_fail_counter_toggle:
# print(steam_fail_counter)
try:
if steam_fail_counter >= int(steam_fail_number):
reset_steamcmd(no_warn=True)
steamcmd_reset = True
steam_fail_counter = 0
except:
if steam_fail_counter >= 10:
reset_steamcmd(no_warn=True)
steam_fail_counter = 0
else: else:
process = subprocess.Popen( process = subprocess.Popen(
[steamcmd_path + "\steamcmd.exe"] + command.split(), [steamcmd_path + "\steamcmd.exe"] + command.split(),
@ -261,14 +287,6 @@ def get_steamcmd_path():
config.read(CONFIG_FILE_PATH) config.read(CONFIG_FILE_PATH)
return config.get("Settings", "SteamCMDPath", fallback=cwd()) return config.get("Settings", "SteamCMDPath", fallback=cwd())
def save_config(name, value):
config = configparser.ConfigParser()
config.read(CONFIG_FILE_PATH)
if name and value:
config.set("Settings", name, value)
with open(CONFIG_FILE_PATH, "w") as config_file:
config.write(config_file)
def extract_json_data(json_path, key): def extract_json_data(json_path, key):
with open(json_path, "r") as json_file: with open(json_path, "r") as json_file:
data = json.load(json_file) data = json.load(json_file)
@ -376,6 +394,17 @@ def get_button_state_colors(file_path, state):
except json.JSONDecodeError: except json.JSONDecodeError:
return None return None
def reset_steamcmd(no_warn=None):
steamcmd_path = get_steamcmd_path()
steamcmd_steamapps = os.path.join(steamcmd_path, "steamapps")
if os.path.exists(steamcmd_steamapps):
remove_tree(steamcmd_steamapps, show_error=True)
if not no_warn:
show_message("Success!", "SteamCMD has been reset successfully!", icon="info")
else:
if not no_warn:
show_message("Warning!", "steamapps folder was not found, maybe already removed?", icon="warning")
# End helper functions # End helper functions
class UpdateWindow(ctk.CTkToplevel): class UpdateWindow(ctk.CTkToplevel):
@ -820,6 +849,16 @@ class SettingsTab(ctk.CTkFrame):
\nThis is not accurate ,it's better than with it off which is calculating the downloaded folder size which steamcmd dumps the full size rigth mostly") \nThis is not accurate ,it's better than with it off which is calculating the downloaded folder size which steamcmd dumps the full size rigth mostly")
self.estimated_progress_var.set(self.load_settings("estimated_progress", "on")) self.estimated_progress_var.set(self.load_settings("estimated_progress", "on"))
# Resetr steam on many fails
self.reset_steamcmd_on_fail_var = ctk.IntVar()
self.reset_steamcmd_on_fail_var.trace_add("write", self.enable_save_button)
self.reset_steamcmd_on_fail_text = ctk.CTkLabel(left_frame, text=f"Reset steamcmd on % fails: (n of fails)", anchor="w")
self.reset_steamcmd_on_fail_text.grid(row=5, column=1, padx=20, pady=(10, 0), sticky="nw")
self.reset_steamcmd_on_fail = ctk.CTkOptionMenu(left_frame, values=["10", "15", "20", "Disable"], variable=self.reset_steamcmd_on_fail_var)
self.reset_steamcmd_on_fail.grid(row=6, column=1, padx=20, pady=(0, 0), sticky="nw")
self.reset_steamcmd_on_fail_tooltip = CTkToolTip(self.reset_steamcmd_on_fail, message="This actually fixes steamcmd when its crashing way too much")
self.reset_steamcmd_on_fail.set(value=self.load_settings("reset_on_fail", "10"))
# Check for updates button n Launch boiii # Check for updates button n Launch boiii
self.check_for_updates = ctk.CTkButton(right_frame, text="Check for updates", command=self.settings_check_for_updates) self.check_for_updates = ctk.CTkButton(right_frame, text="Check for updates", command=self.settings_check_for_updates)
self.check_for_updates.grid(row=1, column=1, padx=20, pady=(20, 0), sticky="n") self.check_for_updates.grid(row=1, column=1, padx=20, pady=(20, 0), sticky="n")
@ -887,7 +926,7 @@ class SettingsTab(ctk.CTkFrame):
def save_settings(self): def save_settings(self):
self.save_button.configure(state='disabled') self.save_button.configure(state='disabled')
global console, clean_on_finish, continuous, estimated_progress global console, clean_on_finish, continuous, estimated_progress, steam_fail_number, steam_fail_counter_toggle
if self.check_updates_checkbox.get(): if self.check_updates_checkbox.get():
save_config("checkforupdtes", "on") save_config("checkforupdtes", "on")
else: else:
@ -921,8 +960,17 @@ class SettingsTab(ctk.CTkFrame):
save_config("estimated_progress", "off") save_config("estimated_progress", "off")
estimated_progress = False estimated_progress = False
if self.reset_steamcmd_on_fail.get():
value = self.reset_steamcmd_on_fail.get()
if value == "Disable":
steam_fail_counter_toggle = False
else:
steam_fail_counter_toggle = True
steam_fail_number = int(value)
save_config("reset_on_fail", value)
def load_settings(self, setting, fallback=None): def load_settings(self, setting, fallback=None):
global console, clean_on_finish, continuous, estimated_progress global console, clean_on_finish, continuous, estimated_progress, steam_fail_counter_toggle, steam_fail_number
if setting == "console": if setting == "console":
if check_config(setting, fallback) == "on": if check_config(setting, fallback) == "on":
console = True console = True
@ -954,6 +1002,19 @@ class SettingsTab(ctk.CTkFrame):
estimated_progress = False estimated_progress = False
return 0 return 0
if setting == "reset_on_fail":
option = check_config(setting, fallback)
if option == "Disable":
steam_fail_counter_toggle = False
return "Disable"
else:
try:
steam_fail_number = int(option)
return option
except:
steam_fail_number = 10
return "10"
if setting == "theme": if setting == "theme":
if os.path.exists(os.path.join(cwd(), "boiiiwd_theme.json")): if os.path.exists(os.path.join(cwd(), "boiiiwd_theme.json")):
return "Custom" return "Custom"
@ -993,6 +1054,10 @@ class SettingsTab(ctk.CTkFrame):
def load_on_switch_screen(self): def load_on_switch_screen(self):
self.check_updates_var.set(self.load_settings("checkforupdtes")) self.check_updates_var.set(self.load_settings("checkforupdtes"))
self.console_var.set(self.load_settings("console")) self.console_var.set(self.load_settings("console"))
self.reset_steamcmd_on_fail.set(value=self.load_settings("reset_on_fail", "10"))
self.estimated_progress_var.set(self.load_settings("estimated_progress", "on"))
self.clean_checkbox_var.set(self.load_settings("clean_on_finish", "on"))
self.continuous_var.set(self.load_settings("continuous_download"))
# keep last cuz of trace_add() # keep last cuz of trace_add()
self.save_button.configure(state='disabled') self.save_button.configure(state='disabled')
@ -1001,13 +1066,7 @@ class SettingsTab(ctk.CTkFrame):
launch_boiii_func(check_config("destinationfolder")) launch_boiii_func(check_config("destinationfolder"))
def settings_reset_steamcmd(self): def settings_reset_steamcmd(self):
steamcmd_path = get_steamcmd_path() reset_steamcmd()
steamcmd_steamapps = os.path.join(steamcmd_path, "steamapps")
if os.path.exists(steamcmd_steamapps):
remove_tree(steamcmd_steamapps, show_error=True)
show_message("Success!", "SteamCMD has been reset successfully!", icon="info")
else:
show_message("Warning!", "steamapps folder was not found, maybe already removed?", icon="warning")
class BOIIIWD(ctk.CTk): class BOIIIWD(ctk.CTk):
def __init__(self): def __init__(self):
@ -1178,13 +1237,14 @@ class BOIIIWD(ctk.CTk):
self.settings_tab.load_settings("continuous_download", "on") self.settings_tab.load_settings("continuous_download", "on")
self.settings_tab.load_settings("console", "off") self.settings_tab.load_settings("console", "off")
self.settings_tab.load_settings("estimated_progress", "on") self.settings_tab.load_settings("estimated_progress", "on")
self.settings_tab.load_settings("reset_on_fail", "10")
except: except:
pass pass
if not check_steamcmd(): if not check_steamcmd():
self.show_warning_message() self.show_warning_message()
def save_window_size(self ,event): def save_window_size(self, event):
with open("boiiiwd_dont_touch.conf", "w") as conf: with open("boiiiwd_dont_touch.conf", "w") as conf:
conf.write(self.geometry()) conf.write(self.geometry())
@ -1512,7 +1572,7 @@ class BOIIIWD(ctk.CTk):
start_down_thread = threading.Thread(target=self.download_thread) start_down_thread = threading.Thread(target=self.download_thread)
start_down_thread.start() start_down_thread.start()
else: else:
show_message("Warning", "Already downloading a map.") show_message("Warning", "Already pressed, Please wait.")
def download_thread(self): def download_thread(self):
try: try:
@ -1585,17 +1645,25 @@ class BOIIIWD(ctk.CTk):
def check_and_update_progress(): def check_and_update_progress():
# delay untill steam boots up and starts downloading (ive a better idea ill implement it later) # delay untill steam boots up and starts downloading (ive a better idea ill implement it later)
time.sleep(8) time.sleep(8)
global stopped global stopped, steamcmd_reset
previous_net_speed = 0 previous_net_speed = 0
est_downloaded_bytes = 0 est_downloaded_bytes = 0
start_time = time.time() start_time = time.time()
file_size = ws_file_size file_size = ws_file_size
while not stopped: while not stopped:
if steamcmd_reset:
steamcmd_reset = False
previous_net_speed = 0
est_downloaded_bytes = 0
try: try:
current_size = sum(os.path.getsize(os.path.join(download_folder, f)) for f in os.listdir(download_folder)) current_size = sum(os.path.getsize(os.path.join(download_folder, f)) for f in os.listdir(download_folder))
except: except:
try:
current_size = sum(os.path.getsize(os.path.join(map_folder, f)) for f in os.listdir(map_folder)) current_size = sum(os.path.getsize(os.path.join(map_folder, f)) for f in os.listdir(map_folder))
except:
continue
progress = int(current_size / file_size * 100) progress = int(current_size / file_size * 100)

BIN
dist/BOIIIWD.exe vendored

Binary file not shown.