mirror of
https://github.com/nixietab/picodulce.git
synced 2025-04-10 10:28:56 +01:00
fixed things
This commit is contained in:
parent
ce93c8522e
commit
942daa79ad
340
marroc.py
340
marroc.py
@ -3,11 +3,9 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QListWidget, QListWidgetItem, QMessageBox, QComboBox, QDialog, QTabWidget, QFileDialog, QListView
|
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QListWidget, QListWidgetItem, QMessageBox, QComboBox, QDialog, QTabWidget, QMainWindow, QSpacerItem, QSizePolicy
|
||||||
from PyQt5.QtCore import Qt, QSize, QDir, QStringListModel
|
from PyQt5.QtCore import Qt, QSize
|
||||||
from PyQt5.QtGui import QPixmap, QIcon, QPalette, QColor
|
from PyQt5.QtGui import QIcon, QPalette, QColor, QPixmap
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CONFIG_FILE = "config.json"
|
CONFIG_FILE = "config.json"
|
||||||
|
|
||||||
@ -15,25 +13,30 @@ class ModrinthSearchApp(QWidget):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
|
# Check and create folders if they don't exist
|
||||||
|
self.check_and_create_folders()
|
||||||
|
|
||||||
self.setWindowTitle("Marroc Mod Manager")
|
self.setWindowTitle("Marroc Mod Manager")
|
||||||
self.setGeometry(100, 100, 500, 400)
|
self.setGeometry(100, 100, 500, 400)
|
||||||
|
|
||||||
palette = QPalette()
|
# Set Fusion style
|
||||||
palette.setColor(QPalette.Window, QColor(53, 53, 53))
|
app.setStyle("Fusion")
|
||||||
palette.setColor(QPalette.WindowText, Qt.white)
|
# Set dark color palette
|
||||||
palette.setColor(QPalette.Base, QColor(25, 25, 25))
|
dark_palette = QPalette()
|
||||||
palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
|
dark_palette.setColor(QPalette.Window, QColor(53, 53, 53))
|
||||||
palette.setColor(QPalette.ToolTipBase, Qt.white)
|
dark_palette.setColor(QPalette.WindowText, Qt.white)
|
||||||
palette.setColor(QPalette.ToolTipText, Qt.white)
|
dark_palette.setColor(QPalette.Base, QColor(25, 25, 25))
|
||||||
palette.setColor(QPalette.Text, Qt.white)
|
dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
|
||||||
palette.setColor(QPalette.Button, QColor(53, 53, 53))
|
dark_palette.setColor(QPalette.ToolTipBase, Qt.white)
|
||||||
palette.setColor(QPalette.ButtonText, Qt.white)
|
dark_palette.setColor(QPalette.ToolTipText, Qt.white)
|
||||||
palette.setColor(QPalette.BrightText, Qt.red)
|
dark_palette.setColor(QPalette.Text, Qt.white)
|
||||||
palette.setColor(QPalette.Link, QColor(42, 130, 218))
|
dark_palette.setColor(QPalette.Button, QColor(53, 53, 53))
|
||||||
palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
|
dark_palette.setColor(QPalette.ButtonText, Qt.white)
|
||||||
palette.setColor(QPalette.HighlightedText, Qt.white)
|
dark_palette.setColor(QPalette.BrightText, Qt.red)
|
||||||
self.setPalette(palette)
|
dark_palette.setColor(QPalette.Link, QColor(42, 130, 218))
|
||||||
|
dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
|
||||||
|
dark_palette.setColor(QPalette.HighlightedText, Qt.white)
|
||||||
|
self.setPalette(dark_palette)
|
||||||
|
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
|
|
||||||
@ -51,16 +54,30 @@ class ModrinthSearchApp(QWidget):
|
|||||||
|
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
def check_and_create_folders(self):
|
||||||
|
# Check and create 'marroc/mods' and 'marroc/resourcepacks' folders if they don't exist
|
||||||
|
folders = ['marroc/mods', 'marroc/resourcepacks']
|
||||||
|
for folder in folders:
|
||||||
|
if not os.path.exists(folder):
|
||||||
|
os.makedirs(folder)
|
||||||
|
|
||||||
def init_search_tab(self):
|
def init_search_tab(self):
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
|
|
||||||
|
search_layout = QHBoxLayout() # Horizontal layout for search bar and dropdown
|
||||||
self.search_input = QLineEdit()
|
self.search_input = QLineEdit()
|
||||||
self.search_input.setPlaceholderText("Enter mod name...")
|
self.search_input.setPlaceholderText("Enter mod name...")
|
||||||
layout.addWidget(self.search_input)
|
search_layout.addWidget(self.search_input)
|
||||||
|
|
||||||
self.search_button = QPushButton("Search")
|
self.search_button = QPushButton("Search")
|
||||||
self.search_button.clicked.connect(self.search_mods)
|
self.search_button.clicked.connect(self.search_mods)
|
||||||
layout.addWidget(self.search_button)
|
search_layout.addWidget(self.search_button)
|
||||||
|
|
||||||
|
self.search_type_dropdown = QComboBox() # Dropdown for selecting mod type
|
||||||
|
self.search_type_dropdown.addItems(["Mod", "Texture Pack"])
|
||||||
|
search_layout.addWidget(self.search_type_dropdown)
|
||||||
|
|
||||||
|
layout.addLayout(search_layout)
|
||||||
|
|
||||||
self.mods_list = QListWidget()
|
self.mods_list = QListWidget()
|
||||||
layout.addWidget(self.mods_list)
|
layout.addWidget(self.mods_list)
|
||||||
@ -75,14 +92,18 @@ class ModrinthSearchApp(QWidget):
|
|||||||
|
|
||||||
def init_mods_tab(self):
|
def init_mods_tab(self):
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
self.mod_manager = ModManager() # Integrate ModManager into Mods Tab
|
self.mod_manager_window = ModManagerWindow() # Initialize ModManagerWindow
|
||||||
layout.addWidget(self.mod_manager)
|
layout.addWidget(self.mod_manager_window)
|
||||||
self.mods_tab.setLayout(layout)
|
self.mods_tab.setLayout(layout)
|
||||||
|
|
||||||
def search_mods(self):
|
def search_mods(self):
|
||||||
self.mods_list.clear()
|
self.mods_list.clear()
|
||||||
mod_name = self.search_input.text()
|
mod_name = self.search_input.text()
|
||||||
api_url = f"https://api.modrinth.com/v2/search?query={mod_name}&limit=20&facets=%5B%5B%22project_type%3Amod%22%5D%5D"
|
search_type = self.search_type_dropdown.currentText().lower() # Get selected mod type
|
||||||
|
if search_type == "texture pack":
|
||||||
|
api_url = f"https://api.modrinth.com/v2/search?query={mod_name}&limit=20&facets=%5B%5B%22project_type%3Aresourcepack%22%5D%5D"
|
||||||
|
else:
|
||||||
|
api_url = f"https://api.modrinth.com/v2/search?query={mod_name}&limit=20&facets=%5B%5B%22project_type%3A{search_type}%22%5D%5D"
|
||||||
response = requests.get(api_url)
|
response = requests.get(api_url)
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
mods_data = json.loads(response.text)
|
mods_data = json.loads(response.text)
|
||||||
@ -135,152 +156,172 @@ class ModrinthSearchApp(QWidget):
|
|||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
class ModManager(QWidget):
|
class ModManagerWindow(QMainWindow):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.setWindowTitle("Mod Manager")
|
self.setWindowTitle("Mod Manager")
|
||||||
self.setGeometry(100, 100, 600, 400)
|
self.setGeometry(100, 100, 600, 400)
|
||||||
|
|
||||||
self.load_config()
|
self.central_widget = QWidget()
|
||||||
self.mods = []
|
self.setCentralWidget(self.central_widget)
|
||||||
self.available_mods = []
|
|
||||||
|
|
||||||
layout = QHBoxLayout()
|
self.layout = QHBoxLayout(self.central_widget)
|
||||||
|
|
||||||
layout_mods = QVBoxLayout()
|
# Combo box to select between mods and resource packs
|
||||||
layout_buttons = QVBoxLayout()
|
self.file_type_combo_box = QComboBox()
|
||||||
layout_arrow = QVBoxLayout()
|
self.file_type_combo_box.addItems(["Mods", "Resource Packs"])
|
||||||
layout_available_mods = QVBoxLayout()
|
self.file_type_combo_box.currentIndexChanged.connect(self.load_files)
|
||||||
|
|
||||||
self.list_view_mods = QListView()
|
# Left column - Available files
|
||||||
self.list_view_mods.doubleClicked.connect(self.move_mod_to_local)
|
self.available_files_widget = QListWidget()
|
||||||
self.list_view_available_mods = QListView()
|
|
||||||
self.list_view_available_mods.doubleClicked.connect(self.move_mod_to_minecraft)
|
|
||||||
self.populate_mod_list()
|
|
||||||
|
|
||||||
self.arrow_right_button = QPushButton(">")
|
# Right column - Installed files
|
||||||
self.arrow_right_button.setIcon(QIcon('arrow_right.png'))
|
self.installed_files_widget = QListWidget()
|
||||||
self.arrow_right_button.setIconSize(QSize(32, 32))
|
|
||||||
self.arrow_right_button.clicked.connect(self.move_mod_to_minecraft)
|
|
||||||
|
|
||||||
self.arrow_left_button = QPushButton("<")
|
# Vertical layout for buttons and dropdown
|
||||||
self.arrow_left_button.setIcon(QIcon('arrow_left.png'))
|
self.button_dropdown_layout = QVBoxLayout()
|
||||||
self.arrow_left_button.setIconSize(QSize(32, 32))
|
self.button_dropdown_layout.addWidget(self.file_type_combo_box)
|
||||||
self.arrow_left_button.clicked.connect(self.move_mod_to_local)
|
|
||||||
|
|
||||||
|
# Spacer to center the buttons vertically
|
||||||
|
self.button_dropdown_layout.addSpacerItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding))
|
||||||
|
|
||||||
|
# Button to move selected mod from available to installed
|
||||||
|
self.move_right_button = QPushButton(">")
|
||||||
|
self.move_right_button.clicked.connect(self.move_right)
|
||||||
|
self.button_dropdown_layout.addWidget(self.move_right_button)
|
||||||
|
|
||||||
|
# Button to move selected mod from installed to available
|
||||||
|
self.move_left_button = QPushButton("<")
|
||||||
|
self.move_left_button.clicked.connect(self.move_left)
|
||||||
|
self.button_dropdown_layout.addWidget(self.move_left_button)
|
||||||
|
|
||||||
|
# Button to delete selected item
|
||||||
self.delete_button = QPushButton("Delete")
|
self.delete_button = QPushButton("Delete")
|
||||||
self.delete_button.clicked.connect(self.delete_mod)
|
self.delete_button.clicked.connect(self.delete_selected_item)
|
||||||
|
self.button_dropdown_layout.addWidget(self.delete_button)
|
||||||
|
|
||||||
self.config_button = QPushButton("Config")
|
# Spacer to center the buttons vertically
|
||||||
self.config_button.clicked.connect(self.select_mods_directory)
|
self.button_dropdown_layout.addSpacerItem(QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding))
|
||||||
|
|
||||||
self.refresh_button = QPushButton("Refresh")
|
# Add widgets to the layout
|
||||||
self.refresh_button.clicked.connect(self.refresh_mod_list)
|
self.layout.addWidget(self.available_files_widget)
|
||||||
|
self.layout.addLayout(self.button_dropdown_layout)
|
||||||
|
self.layout.addWidget(self.installed_files_widget)
|
||||||
|
|
||||||
layout_mods.addWidget(self.list_view_mods)
|
# Load files based on initial selection
|
||||||
layout_buttons.addWidget(self.arrow_right_button)
|
self.load_files()
|
||||||
layout_buttons.addWidget(self.arrow_left_button)
|
|
||||||
layout_buttons.addWidget(self.delete_button)
|
|
||||||
layout_buttons.addWidget(self.config_button)
|
|
||||||
layout_buttons.addWidget(self.refresh_button) # Add refresh button
|
|
||||||
layout_arrow.addLayout(layout_buttons)
|
|
||||||
layout_available_mods.addWidget(self.list_view_available_mods)
|
|
||||||
|
|
||||||
layout.addLayout(layout_mods)
|
def load_files(self):
|
||||||
layout.addLayout(layout_arrow)
|
file_type = self.file_type_combo_box.currentText()
|
||||||
layout.addLayout(layout_available_mods)
|
if file_type == "Mods":
|
||||||
|
self.load_mods()
|
||||||
|
elif file_type == "Resource Packs":
|
||||||
|
self.load_resource_packs()
|
||||||
|
|
||||||
self.setLayout(layout)
|
def load_mods(self):
|
||||||
|
# Load mods from specified directory
|
||||||
|
mods_directory = "marroc/mods"
|
||||||
|
if os.path.exists(mods_directory) and os.path.isdir(mods_directory):
|
||||||
|
mods = os.listdir(mods_directory)
|
||||||
|
self.available_files_widget.clear()
|
||||||
|
self.available_files_widget.addItems(mods)
|
||||||
|
|
||||||
# Other methods remain unchanged
|
# Load installed mods
|
||||||
|
self.load_installed_mods("mods")
|
||||||
|
|
||||||
def refresh_mod_list(self):
|
def load_resource_packs(self):
|
||||||
self.populate_mod_list()
|
# Load resource packs from specified directory
|
||||||
|
resource_packs_directory = "marroc/resourcepacks"
|
||||||
|
if os.path.exists(resource_packs_directory) and os.path.isdir(resource_packs_directory):
|
||||||
|
resource_packs = os.listdir(resource_packs_directory)
|
||||||
|
self.available_files_widget.clear()
|
||||||
|
self.available_files_widget.addItems(resource_packs)
|
||||||
|
|
||||||
def load_config(self):
|
# Load installed resource packs
|
||||||
if os.path.exists(CONFIG_FILE):
|
self.load_installed_mods("resourcepacks")
|
||||||
with open(CONFIG_FILE, 'r') as f:
|
|
||||||
config = json.load(f)
|
def load_installed_mods(self, file_type):
|
||||||
self.mod_folder = config.get('mod_folder')
|
# Detect Minecraft directory based on the operating system
|
||||||
if not self.mod_folder:
|
if sys.platform.startswith('linux'):
|
||||||
self.set_default_mod_folder()
|
minecraft_directory = os.path.expanduser("~/.local/share/picomc/instances/default/minecraft")
|
||||||
|
elif sys.platform.startswith('win'):
|
||||||
|
minecraft_directory = os.path.join(os.getenv('APPDATA'), '.picomc/instances/default/minecraft')
|
||||||
else:
|
else:
|
||||||
self.set_default_mod_folder()
|
minecraft_directory = ""
|
||||||
|
|
||||||
def set_default_mod_folder(self):
|
if minecraft_directory:
|
||||||
if sys.platform == 'win32':
|
installed_files_directory = os.path.join(minecraft_directory, file_type)
|
||||||
self.mod_folder = os.path.expandvars('%APPDATA%\\.picomc\\instances\\default\\mods')
|
if os.path.exists(installed_files_directory) and os.path.isdir(installed_files_directory):
|
||||||
elif sys.platform == 'linux':
|
installed_files = os.listdir(installed_files_directory)
|
||||||
self.mod_folder = os.path.expanduser('~/.local/share/picomc/instances/default/minecraft/mods')
|
self.installed_files_widget.clear()
|
||||||
|
self.installed_files_widget.addItems(installed_files)
|
||||||
|
|
||||||
|
def move_right(self):
|
||||||
|
selected_item = self.available_files_widget.currentItem()
|
||||||
|
if selected_item:
|
||||||
|
source_directory = self.get_source_directory()
|
||||||
|
destination_directory = self.get_destination_directory()
|
||||||
|
file_name = selected_item.text()
|
||||||
|
source_path = os.path.join(source_directory, file_name)
|
||||||
|
destination_path = os.path.join(destination_directory, file_name)
|
||||||
|
shutil.move(source_path, destination_path)
|
||||||
|
self.load_files()
|
||||||
|
|
||||||
|
def move_left(self):
|
||||||
|
selected_item = self.installed_files_widget.currentItem()
|
||||||
|
if selected_item:
|
||||||
|
source_directory = self.get_destination_directory()
|
||||||
|
destination_directory = self.get_source_directory()
|
||||||
|
file_name = selected_item.text()
|
||||||
|
source_path = os.path.join(source_directory, file_name)
|
||||||
|
destination_path = os.path.join(destination_directory, file_name)
|
||||||
|
shutil.move(source_path, destination_path)
|
||||||
|
self.load_files()
|
||||||
|
|
||||||
|
def delete_selected_item(self):
|
||||||
|
selected_item = self.available_files_widget.currentItem() or self.installed_files_widget.currentItem()
|
||||||
|
if selected_item:
|
||||||
|
file_name = selected_item.text()
|
||||||
|
reply = QMessageBox.question(self, 'Delete Item', f'Are you sure you want to delete "{file_name}"?',
|
||||||
|
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
|
||||||
|
if reply == QMessageBox.Yes:
|
||||||
|
file_type = self.file_type_combo_box.currentText()
|
||||||
|
if file_type == "Mods":
|
||||||
|
directory = "marroc/mods"
|
||||||
|
elif file_type == "Resource Packs":
|
||||||
|
directory = "marroc/resourcepacks"
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
file_path = os.path.join(directory, file_name)
|
||||||
|
if os.path.exists(file_path):
|
||||||
|
os.remove(file_path)
|
||||||
|
self.load_files()
|
||||||
|
else:
|
||||||
|
QMessageBox.warning(self, 'File Not Found', 'The selected file does not exist.')
|
||||||
|
|
||||||
|
def get_source_directory(self):
|
||||||
|
file_type = self.file_type_combo_box.currentText()
|
||||||
|
if file_type == "Mods":
|
||||||
|
return "marroc/mods"
|
||||||
|
elif file_type == "Resource Packs":
|
||||||
|
return "marroc/resourcepacks"
|
||||||
else:
|
else:
|
||||||
self.mod_folder = QDir.homePath()
|
return ""
|
||||||
|
|
||||||
def save_config(self):
|
def get_destination_directory(self):
|
||||||
config = {'mod_folder': self.mod_folder}
|
file_type = self.file_type_combo_box.currentText()
|
||||||
with open(CONFIG_FILE, 'w') as f:
|
if file_type == "Mods":
|
||||||
json.dump(config, f)
|
if sys.platform.startswith('linux'):
|
||||||
|
return os.path.expanduser("~/.local/share/picomc/instances/default/minecraft/mods")
|
||||||
def populate_mod_list(self):
|
elif sys.platform.startswith('win'):
|
||||||
self.available_mods = os.listdir(self.mod_folder)
|
return os.path.join(os.getenv('APPDATA'), '.picomc/instances/default/minecraft/mods')
|
||||||
self.mods = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.jar')]
|
elif file_type == "Resource Packs":
|
||||||
|
if sys.platform.startswith('linux'):
|
||||||
self.model_mods = QStringListModel(self.mods)
|
return os.path.expanduser("~/.local/share/picomc/instances/default/minecraft/resourcepacks")
|
||||||
self.model_available_mods = QStringListModel(self.available_mods)
|
elif sys.platform.startswith('win'):
|
||||||
|
return os.path.join(os.getenv('APPDATA'), '.picomc/instances/default/minecraft/resourcepacks')
|
||||||
self.list_view_mods.setModel(self.model_mods)
|
|
||||||
self.list_view_available_mods.setModel(self.model_available_mods)
|
|
||||||
|
|
||||||
def move_mod_to_minecraft(self):
|
|
||||||
selected_mod_index = self.list_view_mods.currentIndex()
|
|
||||||
selected_mod = self.mods[selected_mod_index.row()]
|
|
||||||
destination_path = os.path.join(self.mod_folder, os.path.basename(selected_mod))
|
|
||||||
|
|
||||||
if os.path.exists(destination_path):
|
|
||||||
QMessageBox.warning(self, "Error", "A mod with the same name already exists in the mods folder.")
|
|
||||||
else:
|
else:
|
||||||
shutil.move(selected_mod, self.mod_folder)
|
return ""
|
||||||
self.available_mods.append(selected_mod)
|
|
||||||
self.model_available_mods.setStringList(self.available_mods)
|
|
||||||
|
|
||||||
# Update the lists
|
|
||||||
self.populate_mod_list()
|
|
||||||
self.save_config()
|
|
||||||
|
|
||||||
def move_mod_to_local(self):
|
|
||||||
selected_mod_index = self.list_view_available_mods.currentIndex()
|
|
||||||
selected_mod = self.available_mods[selected_mod_index.row()]
|
|
||||||
destination_path = os.path.join(os.getcwd(), os.path.basename(selected_mod))
|
|
||||||
|
|
||||||
if os.path.exists(destination_path):
|
|
||||||
QMessageBox.warning(self, "Error", "A mod with the same name already exists in the current directory.")
|
|
||||||
else:
|
|
||||||
shutil.move(os.path.join(self.mod_folder, selected_mod), os.getcwd())
|
|
||||||
self.mods.append(selected_mod)
|
|
||||||
self.model_mods.setStringList(self.mods)
|
|
||||||
|
|
||||||
# Update the lists
|
|
||||||
self.populate_mod_list()
|
|
||||||
self.save_config()
|
|
||||||
|
|
||||||
def delete_mod(self):
|
|
||||||
selected_mod_index = self.list_view_available_mods.currentIndex()
|
|
||||||
selected_mod = self.available_mods[selected_mod_index.row()]
|
|
||||||
|
|
||||||
reply = QMessageBox.question(self, 'Confirmation', f"Are you sure you want to delete '{selected_mod}'?",
|
|
||||||
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
|
|
||||||
if reply == QMessageBox.Yes:
|
|
||||||
os.remove(os.path.join(self.mod_folder, selected_mod))
|
|
||||||
self.available_mods.remove(selected_mod)
|
|
||||||
self.model_available_mods.setStringList(self.available_mods)
|
|
||||||
self.save_config()
|
|
||||||
|
|
||||||
def select_mods_directory(self):
|
|
||||||
directory = QFileDialog.getExistingDirectory(self, "Select Minecraft Mods Directory", self.mod_folder)
|
|
||||||
if directory:
|
|
||||||
self.mod_folder = directory
|
|
||||||
self.populate_mod_list()
|
|
||||||
self.save_config()
|
|
||||||
|
|
||||||
|
|
||||||
class ModDetailsWindow(QDialog):
|
class ModDetailsWindow(QDialog):
|
||||||
def __init__(self, mod_data, icon_url, mod_versions):
|
def __init__(self, mod_data, icon_url, mod_versions):
|
||||||
@ -348,7 +389,8 @@ class ModDetailsWindow(QDialog):
|
|||||||
try:
|
try:
|
||||||
response = requests.get(file_url)
|
response = requests.get(file_url)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
with open(filename, 'wb') as f:
|
save_dir = "marroc/mods" if filename.endswith('.jar') else "marroc/resourcepacks"
|
||||||
|
with open(os.path.join(save_dir, filename), 'wb') as f:
|
||||||
f.write(response.content)
|
f.write(response.content)
|
||||||
QMessageBox.information(self, "Download Mod", f"Downloaded {filename} successfully.")
|
QMessageBox.information(self, "Download Mod", f"Downloaded {filename} successfully.")
|
||||||
return
|
return
|
||||||
@ -363,4 +405,4 @@ if __name__ == "__main__":
|
|||||||
app.setWindowIcon(app_icon) # Set the application icon
|
app.setWindowIcon(app_icon) # Set the application icon
|
||||||
window = ModrinthSearchApp()
|
window = ModrinthSearchApp()
|
||||||
window.show()
|
window.show()
|
||||||
sys.exit(app.exec_())
|
sys.exit(app.exec_())
|
||||||
|
Loading…
Reference in New Issue
Block a user