added update btn in details in library (redownloads the item sisnce steamcmd doesnt support updates for ws items)

This commit is contained in:
faroukbmiled 2023-09-13 17:27:03 +01:00
parent 97e26c9757
commit ac28bc043c

View File

@ -506,10 +506,11 @@ class LibraryTab(ctk.CTkScrollableFrame):
self.filter_type = True self.filter_type = True
self.clipboard_has_content = False self.clipboard_has_content = False
def add_item(self, item, image=None, item_type="map", workshop_id=None, folder=None): def add_item(self, item, image=None, workshop_id=None, folder=None):
label = ctk.CTkLabel(self, text=item, image=image, compound="left", padx=5, anchor="w") label = ctk.CTkLabel(self, text=item, image=image, compound="left", padx=5, anchor="w")
button = ctk.CTkButton(self, text="Remove", width=60, height=24, fg_color="#3d3f42") button = ctk.CTkButton(self, text="Remove", width=60, height=24, fg_color="#3d3f42")
button_view = ctk.CTkButton(self, text="Details", width=55, height=24, fg_color="#3d3f42") button_view = ctk.CTkButton(self, text="Details", width=55, height=24, fg_color="#3d3f42")
button_update = ctk.CTkButton(self, text="Update", width=55, height=24, fg_color="#3d3f42")
button.configure(command=lambda: self.remove_item(item, folder, workshop_id)) button.configure(command=lambda: self.remove_item(item, folder, workshop_id))
button_view.configure(command=lambda: self.show_map_info(workshop_id)) button_view.configure(command=lambda: self.show_map_info(workshop_id))
button_view_tooltip = CTkToolTip(button_view, message="Opens up a window that shows basic details") button_view_tooltip = CTkToolTip(button_view, message="Opens up a window that shows basic details")
@ -664,7 +665,7 @@ class LibraryTab(ctk.CTkScrollableFrame):
if text_to_add not in self.added_items: if text_to_add not in self.added_items:
self.added_items.add(text_to_add) self.added_items.add(text_to_add)
image_path = mod_img if item_type == "mod" else map_img image_path = mod_img if item_type == "mod" else map_img
self.add_item(text_to_add, image=ctk.CTkImage(Image.open(image_path)), item_type=item_type, workshop_id=workshop_id, folder=zone_path.parent) self.add_item(text_to_add, image=ctk.CTkImage(Image.open(image_path)), workshop_id=workshop_id, folder=zone_path.parent)
if not self.item_exists_in_file(items_file, workshop_id): if not self.item_exists_in_file(items_file, workshop_id):
item_info = { item_info = {
@ -828,6 +829,8 @@ class LibraryTab(ctk.CTkScrollableFrame):
top.after(210, lambda: top.iconbitmap(os.path.join(RESOURCES_DIR, "ryuk.ico"))) top.after(210, lambda: top.iconbitmap(os.path.join(RESOURCES_DIR, "ryuk.ico")))
top.title("Map/Mod Information") top.title("Map/Mod Information")
top.attributes('-topmost', 'true') top.attributes('-topmost', 'true')
current_year = datetime.datetime.now().year
down_date = self.get_item_by_id(LIBRARY_FILE, workshop_id, 'date')
def close_window(): def close_window():
top.destroy() top.destroy()
@ -835,6 +838,38 @@ class LibraryTab(ctk.CTkScrollableFrame):
def view_map_mod(): def view_map_mod():
webbrowser.open(url) webbrowser.open(url)
def check_for_updates():
date_format_with_year = "%d %b, %Y @ %I:%M%p"
date_format_with_added_year = "%d %b @ %I:%M%p, %Y"
try:
try:
download_datetime = datetime.datetime.strptime(down_date, date_format_with_year)
except ValueError:
download_datetime = datetime.datetime.strptime(down_date + f", {current_year}", date_format_with_added_year)
try:
upload_datetime = datetime.datetime.strptime(date_updated, date_format_with_year)
except ValueError:
upload_datetime = datetime.datetime.strptime(date_updated + f", {current_year}", date_format_with_added_year)
if upload_datetime >= download_datetime:
if show_message("There is an update.", "Press update to redownload!", icon="info", _return=True, option_1="No", option_2="Download"):
if app.is_downloading:
show_message("Error", "Please wait for the current download to finish or stop it then restart.", icon="cancel")
return
app.edit_workshop_id.delete(0, "end")
app.edit_workshop_id.insert(0, workshop_id)
app.main_button_event()
app.download_map(update=True)
top.destroy()
return
elif upload_datetime < download_datetime:
show_message("Up to date!", "No updates found!", icon="info")
except:
print(f"Error {date_updated}")
show_message("Up to date!", "No updates found!", icon="info")
# frames # frames
stars_frame = ctk.CTkFrame(top) stars_frame = ctk.CTkFrame(top)
stars_frame.grid(row=0, column=0, columnspan=2, padx=20, pady=(20, 0), sticky="nsew") stars_frame.grid(row=0, column=0, columnspan=2, padx=20, pady=(20, 0), sticky="nsew")
@ -866,7 +901,7 @@ class LibraryTab(ctk.CTkScrollableFrame):
date_updated_label = ctk.CTkLabel(info_frame, text=f"Updated: {date_updated}") date_updated_label = ctk.CTkLabel(info_frame, text=f"Updated: {date_updated}")
date_updated_label.grid(row=4, column=0, columnspan=2, sticky="w", padx=20, pady=5) date_updated_label.grid(row=4, column=0, columnspan=2, sticky="w", padx=20, pady=5)
date_updated_label = ctk.CTkLabel(info_frame, text=f"Downloaded at: {self.get_item_by_id(LIBRARY_FILE, workshop_id, 'date')}") date_updated_label = ctk.CTkLabel(info_frame, text=f"Downloaded at: {down_date}")
date_updated_label.grid(row=5, column=0, columnspan=2, sticky="w", padx=20, pady=5) date_updated_label.grid(row=5, column=0, columnspan=2, sticky="w", padx=20, pady=5)
stars_image_label = ctk.CTkLabel(stars_frame) stars_image_label = ctk.CTkLabel(stars_frame)
@ -886,11 +921,15 @@ class LibraryTab(ctk.CTkScrollableFrame):
image_label.pack(expand=True, fill="both", padx=(10, 20), pady=(10, 10)) image_label.pack(expand=True, fill="both", padx=(10, 20), pady=(10, 10))
# Buttons # Buttons
close_button = ctk.CTkButton(buttons_frame, text="View", command=view_map_mod) close_button = ctk.CTkButton(buttons_frame, text="View", command=view_map_mod, width=130)
close_button.pack(side="left", padx=(10, 20), pady=(10, 10)) close_button.grid(row=0, column=0, padx=(20, 20), pady=(10, 10), sticky="n")
view_button = ctk.CTkButton(buttons_frame, text="Close", command=close_window) update_btn = ctk.CTkButton(buttons_frame, text="Update", command=check_for_updates, width=130)
view_button.pack(side="right", padx=(10, 20), pady=(10, 10)) update_btn.grid(row=0, column=1, padx=(10, 20), pady=(10, 10), sticky="n")
update_btn_tooltip = CTkToolTip(update_btn, message="Checks and installs updates of the current selected item (redownload!)", topmost=True)
view_button = ctk.CTkButton(buttons_frame, text="Close", command=close_window, width=130)
view_button.grid(row=0, column=2, padx=(10, 20), pady=(10, 10), sticky="n")
top.grid_rowconfigure(0, weight=0) top.grid_rowconfigure(0, weight=0)
top.grid_rowconfigure(1, weight=0) top.grid_rowconfigure(1, weight=0)
@ -898,6 +937,13 @@ class LibraryTab(ctk.CTkScrollableFrame):
top.grid_columnconfigure(0, weight=1) top.grid_columnconfigure(0, weight=1)
top.grid_columnconfigure(1, weight=1) top.grid_columnconfigure(1, weight=1)
buttons_frame.grid_rowconfigure(0, weight=1)
buttons_frame.grid_rowconfigure(1, weight=1)
buttons_frame.grid_rowconfigure(2, weight=1)
buttons_frame.grid_columnconfigure(0, weight=1)
buttons_frame.grid_columnconfigure(1, weight=1)
buttons_frame.grid_columnconfigure(2, weight=1)
finally: finally:
for button_view in self.button_view_list: for button_view in self.button_view_list:
button_view.configure(state="normal") button_view.configure(state="normal")
@ -1378,6 +1424,10 @@ class SettingsTab(ctk.CTkFrame):
def start_copy_operation(): def start_copy_operation():
def start_thread(): def start_thread():
try: try:
if not cut_var.get() and not copy_var.get():
show_message("Choose operation!", "Please choose an operation, Copy or Cut files from steam!")
return
copy_button.configure(state="disabled") copy_button.configure(state="disabled")
steam_folder = steam_folder_entry.get() steam_folder = steam_folder_entry.get()
ws_folder = os.path.join(steam_folder, "steamapps/workshop/content/311210") ws_folder = os.path.join(steam_folder, "steamapps/workshop/content/311210")
@ -1461,8 +1511,8 @@ class SettingsTab(ctk.CTkFrame):
copy_var.set(True) copy_var.set(True)
progress_bar.set(0) progress_bar.set(0)
finally: except Exception as e:
pass show_message("Error", f"{e}", icon="cancel")
app.after(0, main_thread) app.after(0, main_thread)
@ -2358,7 +2408,7 @@ class BOIIIWD(ctk.CTk):
return return
self.after(0, callback) self.after(0, callback)
def download_map(self): def download_map(self, update=False):
self.is_downloading = False self.is_downloading = False
self.fail_threshold = 0 self.fail_threshold = 0
if not self.is_pressed: if not self.is_pressed:
@ -2367,15 +2417,15 @@ class BOIIIWD(ctk.CTk):
self.library_tab.load_items(self.edit_destination_folder.get()) self.library_tab.load_items(self.edit_destination_folder.get())
if self.queue_enabled: if self.queue_enabled:
self.item_skipped = False self.item_skipped = False
start_down_thread = threading.Thread(target=self.queue_download_thread) start_down_thread = threading.Thread(target=self.queue_download_thread, args=(update,))
start_down_thread.start() start_down_thread.start()
else: else:
start_down_thread = threading.Thread(target=self.download_thread) start_down_thread = threading.Thread(target=self.download_thread, args=(update,))
start_down_thread.start() start_down_thread.start()
else: else:
show_message("Warning", "Already pressed, Please wait.") show_message("Warning", "Already pressed, Please wait.")
def queue_download_thread(self): def queue_download_thread(self, update=None):
self.stopped = False self.stopped = False
self.queue_stop_button = False self.queue_stop_button = False
try: try:
@ -2451,18 +2501,19 @@ class BOIIIWD(ctk.CTk):
if any(workshop_id in item for item in self.library_tab.added_items): if any(workshop_id in item for item in self.library_tab.added_items):
self.already_installed.append(workshop_id) self.already_installed.append(workshop_id)
if self.already_installed: if not update:
item_ids = ", ".join(self.already_installed) if self.already_installed:
if self.settings_tab.skip_already_installed: item_ids = ", ".join(self.already_installed)
for item in self.already_installed: if self.settings_tab.skip_already_installed:
if item in items: for item in self.already_installed:
items.remove(item) if item in items:
show_message("Heads up!, map/s skipped => skip is on in settings", f"These item IDs may already be installed and are skipped:\n{item_ids}", icon="info") items.remove(item)
if not any(isinstance(item, int) for item in items): show_message("Heads up!, map/s skipped => skip is on in settings", f"These item IDs may already be installed and are skipped:\n{item_ids}", icon="info")
self.stop_download() if not any(isinstance(item, int) for item in items):
return self.stop_download()
else: return
show_message("Heads up! map/s not skipped => skip is off in settings", f"These item IDs may already be installed:\n{item_ids}", icon="info") else:
show_message("Heads up! map/s not skipped => skip is off in settings", f"These item IDs may already be installed:\n{item_ids}", icon="info")
self.after(1, self.status_text.configure(text=f"Status: Total size: ~{convert_bytes_to_readable(self.total_queue_size)}")) self.after(1, self.status_text.configure(text=f"Status: Total size: ~{convert_bytes_to_readable(self.total_queue_size)}"))
start_time = time.time() start_time = time.time()
@ -2697,7 +2748,7 @@ class BOIIIWD(ctk.CTk):
self.stop_download() self.stop_download()
self.is_pressed = False self.is_pressed = False
def download_thread(self): def download_thread(self, update=None):
try: try:
self.settings_tab.stopped = False self.settings_tab.stopped = False
@ -2754,12 +2805,13 @@ class BOIIIWD(ctk.CTk):
self.stop_download() self.stop_download()
return return
if any(workshop_id in item for item in self.library_tab.added_items): if not update:
if self.settings_tab.skip_already_installed: if any(workshop_id in item for item in self.library_tab.added_items):
show_message("Heads up!, map skipped => Skip is on in settings", f"This item may already be installed, Stopping: {workshop_id}", icon="info") if self.settings_tab.skip_already_installed:
self.stop_download() show_message("Heads up!, map skipped => Skip is on in settings", f"This item may already be installed, Stopping: {workshop_id}", icon="info")
return self.stop_download()
show_message("Heads up! map not skipped => Skip is off in settings", f"This item may already be installed: {workshop_id}", icon="info") return
show_message("Heads up! map not skipped => Skip is off in settings", f"This item may already be installed: {workshop_id}", icon="info")
self.after(1, lambda mid=workshop_id: self.label_file_size.configure(text=f"File size: {get_workshop_file_size(mid ,raw=True)}")) self.after(1, lambda mid=workshop_id: self.label_file_size.configure(text=f"File size: {get_workshop_file_size(mid ,raw=True)}"))
download_folder = os.path.join(get_steamcmd_path(), "steamapps", "workshop", "downloads", "311210", workshop_id) download_folder = os.path.join(get_steamcmd_path(), "steamapps", "workshop", "downloads", "311210", workshop_id)