mirror of
https://github.com/Omni-guides/Jackify.git
synced 2026-06-08 03:17:44 +02:00
Release v0.6.0
This commit is contained in:
@@ -149,7 +149,7 @@ class FileProgressItem(QWidget):
|
||||
def _set_indeterminate(self):
|
||||
if not self._is_indeterminate:
|
||||
self._is_indeterminate = True
|
||||
# Qt's QProgressStyleAnimation drives this automatically — no manual timer needed
|
||||
# Qt's QProgressStyleAnimation drives this automatically - no manual timer needed
|
||||
self.progress_bar.setRange(0, 0)
|
||||
self.percent_label.setText("")
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ __all__ = ['SummaryProgressWidget', 'FileProgressItem', 'FileProgressList']
|
||||
|
||||
|
||||
class _CpuWorker(QThread):
|
||||
"""Background worker for CPU usage sampling — keeps psutil off the main thread."""
|
||||
"""Background worker for CPU usage sampling - keeps psutil off the main thread."""
|
||||
result = Signal(str)
|
||||
caches_updated = Signal(object, object, float) # process_cache, child_cache, smoothed_pct
|
||||
|
||||
@@ -53,7 +53,7 @@ class _CpuWorker(QThread):
|
||||
try:
|
||||
current_child_pids.add(child.pid)
|
||||
if child.pid not in self._child_cache:
|
||||
# Baseline in background — no longer blocks main thread
|
||||
# Baseline in background - no longer blocks main thread
|
||||
child.cpu_percent(interval=0.1)
|
||||
self._child_cache[child.pid] = child
|
||||
continue
|
||||
@@ -173,7 +173,7 @@ class FileProgressList(QWidget):
|
||||
|
||||
self._last_update_time = 0.0
|
||||
|
||||
# CPU usage tracking — worker thread to avoid blocking the main thread
|
||||
# CPU usage tracking - worker thread to avoid blocking the main thread
|
||||
self._cpu_timer = QTimer(self)
|
||||
self._cpu_timer.timeout.connect(self._start_cpu_worker)
|
||||
self._cpu_timer.setInterval(2000)
|
||||
@@ -342,9 +342,7 @@ class FileProgressList(QWidget):
|
||||
self._cpu_timer.stop()
|
||||
if self._cpu_worker and self._cpu_worker.isRunning():
|
||||
self._cpu_worker.quit()
|
||||
if not self._cpu_worker.wait(500):
|
||||
self._cpu_worker.terminate()
|
||||
self._cpu_worker.wait(1000)
|
||||
self._cpu_worker.wait(1000)
|
||||
self._cpu_worker = None
|
||||
|
||||
def _start_cpu_worker(self):
|
||||
|
||||
@@ -24,15 +24,16 @@ class UnsupportedGameDialog(QDialog):
|
||||
# Signal emitted when user clicks OK to continue
|
||||
continue_installation = Signal()
|
||||
|
||||
def __init__(self, parent=None, game_name: str = None):
|
||||
def __init__(self, parent=None, game_name: str = None, vr_warning: bool = False):
|
||||
super().__init__(parent)
|
||||
self.game_name = game_name
|
||||
self.vr_warning = vr_warning
|
||||
self.setup_ui()
|
||||
self.setup_connections()
|
||||
|
||||
|
||||
def setup_ui(self):
|
||||
"""Set up the dialog UI."""
|
||||
self.setWindowTitle("Game Support Notice")
|
||||
self.setWindowTitle("VR Platform Notice" if self.vr_warning else "Game Support Notice")
|
||||
self.setModal(True)
|
||||
self.setFixedSize(500, 500)
|
||||
|
||||
@@ -49,7 +50,7 @@ class UnsupportedGameDialog(QDialog):
|
||||
icon_label.setFixedSize(32, 32)
|
||||
icon_label.setStyleSheet("color: #e67e22;")
|
||||
title_layout.addWidget(icon_label)
|
||||
title_label = QLabel("<b>Game Support Notice</b>")
|
||||
title_label = QLabel("<b>VR Platform Notice</b>" if self.vr_warning else "<b>Game Support Notice</b>")
|
||||
title_label.setFont(QFont("Arial", 11, QFont.Weight.Bold))
|
||||
title_label.setStyleSheet("color: #3fd0ea;")
|
||||
title_layout.addWidget(title_label)
|
||||
@@ -82,7 +83,24 @@ class UnsupportedGameDialog(QDialog):
|
||||
""")
|
||||
|
||||
# Create the message content
|
||||
if self.game_name:
|
||||
if self.vr_warning:
|
||||
game_label = self.game_name or "a VR modlist"
|
||||
message = f"""<p><strong>You are about to install {game_label}.</strong></p>
|
||||
|
||||
<p>Jackify will handle the download, Wine prefix setup, and Steam shortcut creation as normal. However, getting VR modlists running on Linux involves platform dependencies that are outside Jackify's control:</p>
|
||||
|
||||
<ul>
|
||||
<li>SteamVR must be installed and working with your headset before launching</li>
|
||||
<li>Your VR runtime (SteamVR, ALVR, WiVRn, etc.) must be configured separately</li>
|
||||
<li>Some modlists may require additional manual steps documented by the list author</li>
|
||||
</ul>
|
||||
|
||||
<p>Jackify's VR support is <strong>best effort</strong>. The install and configuration will proceed normally, but whether the modlist runs correctly depends heavily on your VR platform setup.</p>
|
||||
|
||||
<p><strong>Always consult your modlist's installation guide</strong> for any additional manual steps required after Jackify completes.</p>
|
||||
|
||||
<p>Click <strong>Continue</strong> to proceed, or <strong>Cancel</strong> to go back.</p>"""
|
||||
elif self.game_name:
|
||||
message = f"""<p><strong>You are about to install a modlist for <em>{self.game_name}</em>.</strong></p>
|
||||
|
||||
<p>While any modlist can be downloaded with Jackify, the post-install configuration can only be automatically applied to:</p>
|
||||
@@ -187,17 +205,18 @@ class UnsupportedGameDialog(QDialog):
|
||||
self.accepted.connect(self.continue_installation.emit)
|
||||
|
||||
@staticmethod
|
||||
def show_dialog(parent=None, game_name: str = None) -> bool:
|
||||
def show_dialog(parent=None, game_name: str = None, vr_warning: bool = False) -> bool:
|
||||
"""
|
||||
Show the unsupported game dialog and return the user's choice.
|
||||
|
||||
Show the dialog and return the user's choice.
|
||||
|
||||
Args:
|
||||
parent: Parent widget
|
||||
game_name: Name of the unsupported game (optional)
|
||||
|
||||
game_name: Name of the game (optional)
|
||||
vr_warning: Show VR best-effort warning instead of unsupported game notice
|
||||
|
||||
Returns:
|
||||
True if user clicked Continue, False if Cancel
|
||||
"""
|
||||
dialog = UnsupportedGameDialog(parent, game_name)
|
||||
dialog = UnsupportedGameDialog(parent, game_name, vr_warning=vr_warning)
|
||||
result = dialog.exec()
|
||||
return result == QDialog.DialogCode.Accepted
|
||||
Reference in New Issue
Block a user