Remove "Bleeding Edge" feature from settings
Some checks are pending
Version Change Action / version-release (push) Waiting to run

This commit is contained in:
Nix 2025-12-15 19:45:08 -03:00 committed by GitHub
parent 7a5b2e0722
commit 3365848cdc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -16,7 +16,7 @@ from healthcheck import HealthCheck
import modulecli
import loaddaemon
from PyQt5.QtWidgets import QApplication, QComboBox, QWidget, QInputDialog, QVBoxLayout, QListWidget, QSpinBox, QFileDialog, QPushButton, QMessageBox, QDialog, QHBoxLayout, QLabel, QLineEdit, QCheckBox, QTabWidget, QFrame, QSpacerItem, QSizePolicy, QMainWindow, QGridLayout, QTextEdit, QListWidget, QListWidgetItem, QMenu, QRadioButton
from PyQt5.QtWidgets import QApplication, QComboBox, QWidget, QInputDialog, QVBoxLayout, QListWidget, QSpinBox, QFileDialog, QPushButton, QMessageBox, QDialog, QHBoxLayout, QLabel, QLineEdit, QCheckBox, QTabWidget, QFrame, QSpacerItem, QSizePolicy, QMainWindow, QGridLayout, QTextEdit, QListWidget, QListWidgetItem, QMenu, QRadioButton, QProgressDialog
from PyQt5.QtGui import QFont, QIcon, QColor, QPalette, QMovie, QPixmap, QDesktopServices, QBrush
from PyQt5.QtCore import Qt, QObject, pyqtSignal, QThread, QUrl, QMetaObject, Q_ARG, QByteArray, QSize
from datetime import datetime
@ -316,14 +316,9 @@ class zucaroVersionSelector(QWidget):
check_updates_checkbox = QCheckBox('Check Updates on Start')
check_updates_checkbox.setChecked(self.config.get("CheckUpdate", False))
bleeding_edge_checkbox = QCheckBox('Bleeding Edge')
bleeding_edge_checkbox.setChecked(self.config.get("IsBleeding", False))
bleeding_edge_checkbox.stateChanged.connect(lambda: self.show_bleeding_edge_popup(bleeding_edge_checkbox))
settings_layout.addWidget(title_label)
settings_layout.addWidget(discord_rcp_checkbox)
settings_layout.addWidget(check_updates_checkbox)
settings_layout.addWidget(bleeding_edge_checkbox)
update_button = QPushButton('Check for updates')
update_button.clicked.connect(self.check_for_update)
@ -442,7 +437,6 @@ class zucaroVersionSelector(QWidget):
check_updates_checkbox.isChecked(),
theme_background_checkbox.isChecked(),
self.selected_theme,
bleeding_edge_checkbox.isChecked(),
java_path_input.text(),
ram_selector.text(),
manage_java_checkbox.isChecked()
@ -462,18 +456,6 @@ class zucaroVersionSelector(QWidget):
java_path_input.setText(path)
def show_bleeding_edge_popup(self, checkbox):
if checkbox.isChecked():
response = QMessageBox.question(
self,
"Bleeding Edge Feature",
"Enabling 'Bleeding Edge' mode may expose you to unstable and experimental features. Do you want to enable it anyway? In normal mode, updates are only downloaded when a stable release is made.",
QMessageBox.Yes | QMessageBox.No
)
if response == QMessageBox.No:
checkbox.setChecked(False)
def build_themes_list(self):
themes_folder = os.path.join(os.getcwd(), "themes")
themes_list = []
@ -501,14 +483,12 @@ class zucaroVersionSelector(QWidget):
list_item = QListWidgetItem(display_text)
list_item.setData(Qt.UserRole, json_file) # Store the JSON filename as metadata
# Style the name in bold
font = QFont()
font.setBold(False)
list_item.setFont(font)
json_files_list_widget.addItem(list_item)
# Apply spacing and styling to the list
json_files_list_widget.setStyleSheet("""
QListWidget {
padding: 1px;
@ -697,7 +677,6 @@ class zucaroVersionSelector(QWidget):
check_updates_on_start,
theme_background,
selected_theme,
is_bleeding,
java_path,
ram_allocation,
manage_java_enabled
@ -708,7 +687,6 @@ class zucaroVersionSelector(QWidget):
"CheckUpdate": check_updates_on_start,
"ThemeBackground": theme_background,
"Theme": selected_theme,
"IsBleeding": is_bleeding,
"ManageJava": manage_java_enabled,
"MaxRAM": ram_allocation,
"JavaPath": java_path,
@ -1188,21 +1166,14 @@ class zucaroVersionSelector(QWidget):
with open('version.json', 'r') as version_file:
version_data = json.load(version_file)
version_number = version_data.get('version', 'unknown version')
version_bleeding = version_data.get('versionBleeding', None)
except (FileNotFoundError, json.JSONDecodeError):
version_number = 'unknown version'
version_bleeding = None
try:
with open('config.json', 'r') as config_file:
config_data = json.load(config_file)
is_bleeding = config_data.get('IsBleeding', False)
except (FileNotFoundError, json.JSONDecodeError):
config_data = {}
is_bleeding = False
if is_bleeding and version_bleeding:
version_number = version_bleeding
about_message = f"""
<b>PicoDulce Launcher</b><br>
@ -1232,33 +1203,13 @@ class zucaroVersionSelector(QWidget):
with open("version.json") as f:
local_version_info = json.load(f)
local_version = local_version_info.get("version")
local_version_bleeding = local_version_info.get("versionBleeding")
logging.info(f"Local version: {local_version}")
logging.info(f"Local bleeding version: {local_version_bleeding}")
with open("config.json") as config_file:
config = json.load(config_file)
is_bleeding = config.get("IsBleeding", False)
if local_version:
remote_version_info = self.fetch_remote_version()
remote_version = remote_version_info.get("version")
remote_version_bleeding = remote_version_info.get("versionBleeding")
logging.info(f"Remote version: {remote_version}")
logging.info(f"Remote bleeding version: {remote_version_bleeding}")
if is_bleeding:
remote_version_to_check = remote_version_bleeding
local_version_to_check = local_version_bleeding
else:
remote_version_to_check = remote_version
local_version_to_check = local_version
if remote_version_to_check and (remote_version_to_check != local_version_to_check):
if is_bleeding:
update_message = f"Do you want to update to the bleeding edge version ({remote_version_bleeding})?"
else:
update_message = f"A new version ({remote_version}) is available!\nDo you want to download it now?"
if remote_version and (remote_version != local_version):
update_message = f"A new version ({remote_version}) is available!\nDo you want to download it now?"
update_dialog = QMessageBox.question(self, "Update Available", update_message, QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if update_dialog == QMessageBox.Yes:
# Download and apply the update
@ -1277,33 +1228,13 @@ class zucaroVersionSelector(QWidget):
with open("version.json") as f:
local_version_info = json.load(f)
local_version = local_version_info.get("version")
local_version_bleeding = local_version_info.get("versionBleeding")
logging.info(f"Local version: {local_version}")
logging.info(f"Local bleeding version: {local_version_bleeding}")
with open("config.json") as config_file:
config = json.load(config_file)
is_bleeding = config.get("IsBleeding", False)
if local_version:
remote_version_info = self.fetch_remote_version()
remote_version = remote_version_info.get("version")
remote_version_bleeding = remote_version_info.get("versionBleeding")
logging.info(f"Remote version: {remote_version}")
logging.info(f"Remote bleeding version: {remote_version_bleeding}")
if is_bleeding:
remote_version_to_check = remote_version_bleeding
local_version_to_check = local_version_bleeding
else:
remote_version_to_check = remote_version
local_version_to_check = local_version
if remote_version_to_check and (remote_version_to_check != local_version_to_check):
if is_bleeding:
update_message = f"Do you want to update to the bleeding edge version ({remote_version_bleeding})?"
else:
update_message = f"A new version ({remote_version}) is available!\nDo you want to download it now?"
if remote_version and (remote_version != local_version):
update_message = f"A new version ({remote_version}) is available!\nDo you want to download it now?"
update_dialog = QMessageBox.question(self, "Update Available", update_message, QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if update_dialog == QMessageBox.Yes:
# Download and apply the update
@ -1336,26 +1267,89 @@ class zucaroVersionSelector(QWidget):
update_folder = "update"
if not os.path.exists(update_folder):
os.makedirs(update_folder)
for link in version_info.get("links", []):
links = version_info.get("links", [])
total_files = len(links)
# Create progress dialog
progress = QProgressDialog("Downloading updates...", "Cancel", 0, 100, self)
progress.setWindowTitle("Update Progress")
progress.setWindowModality(Qt.WindowModal)
progress.show()
canceled = False
for i, link in enumerate(links):
if progress.wasCanceled():
canceled = True
break
filename = os.path.basename(link)
response = requests.get(link, stream=True)
if response.status_code == 200:
try:
response = requests.get(link, stream=True)
response.raise_for_status()
total_length = response.headers.get('content-length')
with open(os.path.join(update_folder, filename), 'wb') as f:
for chunk in response.iter_content(chunk_size=1024):
f.write(chunk)
else:
QMessageBox.critical(self, "Error", f"Failed to download update file: {filename}")
if total_length is None: # no content length header
f.write(response.content)
else:
dl = 0
total_length = int(total_length)
for chunk in response.iter_content(chunk_size=4096):
if progress.wasCanceled():
canceled = True
break
dl += len(chunk)
f.write(chunk)
# Calculate progress for current file and overall
current_file_progress = (dl / total_length) * 100
overall_progress = (i / total_files * 100) + (current_file_progress / total_files)
progress.setValue(int(overall_progress))
QApplication.processEvents()
if canceled:
break
except requests.exceptions.ConnectionError:
progress.close()
logging.error(f"Connection error downloading {filename}")
QMessageBox.critical(self, "Connection Error", "Failed to connect to the update server.\nPlease check your internet connection.")
return
except Exception as e:
progress.close()
logging.error(f"Error downloading {filename}: {e}")
QMessageBox.critical(self, "Error", f"Failed to download update file: {filename}\n{e}")
return
progress.setValue(100)
progress.close()
# Move downloaded files one directory up
for file in os.listdir(update_folder):
src = os.path.join(update_folder, file)
dst = os.path.join(os.path.dirname(update_folder), file)
shutil.move(src, dst)
# Remove the update folder
shutil.rmtree(update_folder)
QMessageBox.information(self, "Update", "Updates downloaded successfully.")
if not canceled:
# Move downloaded files one directory up
for file in os.listdir(update_folder):
src = os.path.join(update_folder, file)
dst = os.path.join(os.path.dirname(update_folder), file)
shutil.move(src, dst)
# Remove the update folder
shutil.rmtree(update_folder)
# Update zucaro via pip
try:
import subprocess
subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "zucaro"])
logging.info("Successfully updated zucaro via pip.")
except Exception as e:
logging.error(f"Failed to update zucaro: {e}")
QMessageBox.warning(self, "Warning", f"Failed to update zucaro backend: {e}")
QMessageBox.information(self, "Update", "Updates downloaded successfully.")
else:
# Cleanup if canceled
shutil.rmtree(update_folder)
QMessageBox.information(self, "Update Canceled", "Update download was canceled.")
except Exception as e:
logging.error("Error downloading updates: %s", str(e))
QMessageBox.critical(self, "Error", "Failed to download updates.")