edge cases

This commit is contained in:
faroukbmiled 2023-08-01 02:48:40 +01:00
parent f33d8b4520
commit 2f4e490846

View File

@ -37,6 +37,23 @@ def check_steamcmd():
return True return True
def valid_id(workshop_id):
url = f"https://steamcommunity.com/sharedfiles/filedetails/?id={workshop_id}"
response = requests.get(url)
response.raise_for_status()
content = response.text
soup = BeautifulSoup(content, "html.parser")
try:
soup.find("div", class_="rightDetailsBlock").text.strip()
soup.find("div", class_="workshopItemTitle").text.strip()
soup.find("div", class_="detailsStatRight").text.strip()
stars_div = soup.find("div", class_="fileRatingDetails")
stars_div.find("img")["src"]
return True
except:
return False
def convert_speed(speed_bytes): def convert_speed(speed_bytes):
if speed_bytes < 1024: if speed_bytes < 1024:
return speed_bytes, "B/s" return speed_bytes, "B/s"
@ -72,11 +89,6 @@ def run_steamcmd_command(command):
global steampid global steampid
steampid = process.pid steampid = process.pid
for output in process.stdout:
output = output.rstrip()
if output.strip():
print(output)
if process.poll() is not None: if process.poll() is not None:
return process.returncode return process.returncode
@ -117,6 +129,7 @@ def get_workshop_file_size(workshop_id, raw=None):
soup = BeautifulSoup(response.text, "html.parser") soup = BeautifulSoup(response.text, "html.parser")
file_size_element = soup.find("div", class_="detailsStatRight") file_size_element = soup.find("div", class_="detailsStatRight")
try:
if raw: if raw:
file_size_text = file_size_element.get_text(strip=True) file_size_text = file_size_element.get_text(strip=True)
file_size_text = file_size_text.replace(",", "") file_size_text = file_size_text.replace(",", "")
@ -129,6 +142,8 @@ def get_workshop_file_size(workshop_id, raw=None):
file_size_in_bytes = int(file_size_in_mb * 1024 * 1024) file_size_in_bytes = int(file_size_in_mb * 1024 * 1024)
return file_size_in_bytes return file_size_in_bytes
return None return None
except:
return None
def update_progress_bar(current_size, file_size, progress_bar): def update_progress_bar(current_size, file_size, progress_bar):
if file_size is not None: if file_size is not None:
@ -200,7 +215,7 @@ def download_workshop_map(workshop_id, destination_folder, progress_bar, speed_l
except Exception as E: except Exception as E:
print(f"Error copying files: {E}") print(f"Error copying files: {E}")
show_message("Download Complete", f"{mod_type} files are downloaded at {folder_name_path}", icon=QMessageBox.Information) show_message("Download Complete", f"{mod_type} files are downloaded at \n{folder_name_path}\nYou can run the game now!", icon=QMessageBox.Information)
def show_message(title, message, icon=QMessageBox.Warning): def show_message(title, message, icon=QMessageBox.Warning):
msg = QMessageBox() msg = QMessageBox()
@ -379,13 +394,21 @@ class WorkshopDownloaderApp(QWidget):
self.show_warning_message() self.show_warning_message()
return return
workshop_id = self.edit_workshop_id.text()
if not workshop_id.isdigit():
QMessageBox.warning(self, "Warning", "Please enter a valid Workshop ID.")
return
if not valid_id(workshop_id):
QMessageBox.warning(self, "Warning", "Please enter a valid Workshop ID.")
return
steamcmd_path = get_steamcmd_path() steamcmd_path = get_steamcmd_path()
steamcmd_exe_path = os.path.join(steamcmd_path, "steamcmd.exe") steamcmd_exe_path = os.path.join(steamcmd_path, "steamcmd.exe")
steamcmd_size = os.path.getsize(steamcmd_exe_path) steamcmd_size = os.path.getsize(steamcmd_exe_path)
if steamcmd_size < 3 * 1024 * 1024: if steamcmd_size < 3 * 1024 * 1024:
show_message("Warning", "Please wait a bit until SteamCMD downloads and initializes. It might take some time, but it will only happen once.", icon=QMessageBox.Warning) show_message("Warning", "Please wait a bit until SteamCMD downloads and initializes. It might take some time, but it will only happen once.", icon=QMessageBox.Warning)
workshop_id = self.edit_workshop_id.text()
destination_folder = self.edit_destination_folder.text() destination_folder = self.edit_destination_folder.text()
steamcmd_path = self.edit_steamcmd_path.text() steamcmd_path = self.edit_steamcmd_path.text()
self.label_file_size.setText(f"File size: {get_workshop_file_size(workshop_id, raw=True)}") self.label_file_size.setText(f"File size: {get_workshop_file_size(workshop_id, raw=True)}")
@ -464,10 +487,15 @@ class WorkshopDownloaderApp(QWidget):
def show_map_info(self): def show_map_info(self):
workshop_id = self.edit_workshop_id.text() workshop_id = self.edit_workshop_id.text()
if not workshop_id: if not workshop_id:
QMessageBox.warning(self, "Warning", "Please enter a Workshop ID first.") QMessageBox.warning(self, "Warning", "Please enter a Workshop ID first.")
return return
if not workshop_id.isdigit():
QMessageBox.warning(self, "Warning", "Please enter a valid Workshop ID.")
return
self.label_file_size.setText(f"File size: {get_workshop_file_size(workshop_id, raw=True)}") self.label_file_size.setText(f"File size: {get_workshop_file_size(workshop_id, raw=True)}")
try: try:
url = f"https://steamcommunity.com/sharedfiles/filedetails/?id={workshop_id}" url = f"https://steamcommunity.com/sharedfiles/filedetails/?id={workshop_id}"
@ -477,11 +505,15 @@ class WorkshopDownloaderApp(QWidget):
soup = BeautifulSoup(content, "html.parser") soup = BeautifulSoup(content, "html.parser")
try:
map_mod_type = soup.find("div", class_="rightDetailsBlock").text.strip() map_mod_type = soup.find("div", class_="rightDetailsBlock").text.strip()
map_name = soup.find("div", class_="workshopItemTitle").text.strip() map_name = soup.find("div", class_="workshopItemTitle").text.strip()
map_size = soup.find("div", class_="detailsStatRight").text.strip() map_size = soup.find("div", class_="detailsStatRight").text.strip()
stars_div = soup.find("div", class_="fileRatingDetails") stars_div = soup.find("div", class_="fileRatingDetails")
stars = stars_div.find("img")["src"] stars = stars_div.find("img")["src"]
except:
QMessageBox.warning(self, "Warning", "Please enter a valid Workshop ID.")
return
try: try:
preview_image_element = soup.find("img", id="previewImage") preview_image_element = soup.find("img", id="previewImage")