mirror of
https://github.com/Omni-guides/Jackify.git
synced 2026-01-17 11:37:01 +01:00
Initial public release v0.1.0 - Linux Wabbajack Modlist Application
Jackify provides native Linux support for Wabbajack modlist installation and management with automated Steam integration and Proton configuration. Key Features: - Almost Native Linux implementation (texconv.exe run via proton) - Automated Steam shortcut creation and Proton prefix management - Both CLI and GUI interfaces, with Steam Deck optimization Supported Games: - Skyrim Special Edition - Fallout 4 - Fallout New Vegas - Oblivion, Starfield, Enderal, and diverse other games Technical Architecture: - Clean separation between frontend and backend services - Powered by jackify-engine 0.3.x for Wabbajack-matching modlist installation
This commit is contained in:
115
jackify/frontends/cli/menus/wabbajack_menu.py
Normal file
115
jackify/frontends/cli/menus/wabbajack_menu.py
Normal file
@@ -0,0 +1,115 @@
|
||||
"""
|
||||
Wabbajack Tasks Menu Handler for Jackify CLI Frontend
|
||||
Extracted from src.modules.menu_handler.MenuHandler.show_wabbajack_tasks_menu()
|
||||
"""
|
||||
|
||||
import time
|
||||
|
||||
from jackify.shared.colors import (
|
||||
COLOR_SELECTION, COLOR_RESET, COLOR_ACTION, COLOR_PROMPT, COLOR_INFO
|
||||
)
|
||||
from jackify.shared.ui_utils import print_jackify_banner, print_section_header
|
||||
|
||||
class WabbajackMenuHandler:
|
||||
"""
|
||||
Handles the Modlist and Wabbajack Tasks menu
|
||||
Extracted from legacy MenuHandler class
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.logger = None # Will be set by CLI when needed
|
||||
|
||||
def _clear_screen(self):
|
||||
"""Clear the terminal screen"""
|
||||
import os
|
||||
os.system('cls' if os.name == 'nt' else 'clear')
|
||||
|
||||
def show_wabbajack_tasks_menu(self, cli_instance):
|
||||
"""Show the Modlist and Wabbajack Tasks menu"""
|
||||
while True:
|
||||
self._clear_screen()
|
||||
print_jackify_banner()
|
||||
# Use print_section_header for consistency
|
||||
print_section_header("Modlist and Wabbajack Tasks")
|
||||
|
||||
print(f"{COLOR_SELECTION}1.{COLOR_RESET} Install a Modlist (Automated)")
|
||||
print(f" {COLOR_ACTION}→ Uses jackify-engine for a full install flow{COLOR_RESET}")
|
||||
print(f"{COLOR_SELECTION}2.{COLOR_RESET} Configure New Modlist (Post-Download)")
|
||||
print(f" {COLOR_ACTION}→ Modlist .wabbajack file downloaded? Configure it for Steam{COLOR_RESET}")
|
||||
print(f"{COLOR_SELECTION}3.{COLOR_RESET} Configure Existing Modlist (In Steam)")
|
||||
print(f" {COLOR_ACTION}→ Modlist already in Steam? Re-configure it here{COLOR_RESET}")
|
||||
# HIDDEN FOR FIRST RELEASE - UNCOMMENT WHEN READY
|
||||
# print(f"{COLOR_SELECTION}4.{COLOR_RESET} Install Wabbajack Application")
|
||||
# print(f" {COLOR_ACTION}→ Downloads and configures the Wabbajack app itself (via WINE){COLOR_RESET}")
|
||||
print(f"{COLOR_SELECTION}0.{COLOR_RESET} Return to Main Menu")
|
||||
selection = input(f"\n{COLOR_PROMPT}Enter your selection (0-3): {COLOR_RESET}").strip()
|
||||
|
||||
if selection.lower() == 'q': # Allow 'q' to re-display menu
|
||||
continue
|
||||
|
||||
if selection == "1":
|
||||
self._execute_legacy_install_modlist(cli_instance)
|
||||
elif selection == "2":
|
||||
self._execute_legacy_configure_new_modlist(cli_instance)
|
||||
elif selection == "3":
|
||||
self._execute_legacy_configure_existing_modlist(cli_instance)
|
||||
# HIDDEN FOR FIRST RELEASE - UNCOMMENT WHEN READY
|
||||
# elif selection == "4":
|
||||
# self._execute_legacy_install_wabbajack(cli_instance)
|
||||
elif selection == "0":
|
||||
break
|
||||
else:
|
||||
print("Invalid selection. Please try again.")
|
||||
time.sleep(1)
|
||||
|
||||
def _execute_legacy_install_modlist(self, cli_instance):
|
||||
"""LEGACY BRIDGE: Execute modlist installation workflow"""
|
||||
# Import backend services
|
||||
from jackify.backend.core.modlist_operations import ModlistInstallCLI
|
||||
from jackify.backend.handlers.menu_handler import MenuHandler
|
||||
|
||||
# Create a proper MenuHandler instance with the required methods
|
||||
menu_handler = MenuHandler()
|
||||
|
||||
# Pass the MenuHandler instance and steamdeck status
|
||||
steamdeck_status = getattr(cli_instance, 'steamdeck', False)
|
||||
installer = ModlistInstallCLI(menu_handler, steamdeck_status)
|
||||
if self.logger:
|
||||
self.logger.debug("MenuHandler: ModlistInstallCLI instance created for Install a Modlist.")
|
||||
context = installer.run_discovery_phase()
|
||||
if context:
|
||||
if self.logger:
|
||||
self.logger.info("MenuHandler: Discovery phase complete, proceeding to configuration phase.")
|
||||
installer.configuration_phase()
|
||||
else:
|
||||
if self.logger:
|
||||
self.logger.info("MenuHandler: Discovery phase did not return context. Skipping configuration.")
|
||||
input("\nPress Enter to return to the Modlist Tasks menu...") # Standard return prompt
|
||||
|
||||
def _execute_legacy_install_wabbajack(self, cli_instance):
|
||||
"""LEGACY BRIDGE: Execute Wabbajack application installation"""
|
||||
if self.logger:
|
||||
self.logger.info("User selected 'Install Wabbajack' from Modlist Tasks menu.")
|
||||
# Add introductory text before calling the Wabbajack installation workflow
|
||||
self._clear_screen()
|
||||
print_jackify_banner()
|
||||
print_section_header("Install Wabbajack Application")
|
||||
print(f"{COLOR_INFO}This process will guide you through downloading and setting up\nthe Wabbajack application itself.{COLOR_RESET}")
|
||||
print("\n") # Spacer
|
||||
cli_instance._cmd_install_wabbajack(None) # Pass the cli_instance itself
|
||||
|
||||
def _execute_legacy_configure_new_modlist(self, cli_instance):
|
||||
"""LEGACY BRIDGE: Execute new modlist configuration"""
|
||||
# Import backend service
|
||||
from jackify.backend.handlers.menu_handler import ModlistMenuHandler
|
||||
|
||||
modlist_menu = ModlistMenuHandler(cli_instance.config_handler)
|
||||
modlist_menu._configure_new_modlist()
|
||||
|
||||
def _execute_legacy_configure_existing_modlist(self, cli_instance):
|
||||
"""LEGACY BRIDGE: Execute existing modlist configuration"""
|
||||
# Import backend service
|
||||
from jackify.backend.handlers.menu_handler import ModlistMenuHandler
|
||||
|
||||
modlist_menu = ModlistMenuHandler(cli_instance.config_handler)
|
||||
modlist_menu._configure_existing_modlist()
|
||||
Reference in New Issue
Block a user