mirror of
https://github.com/relativemodder/aegnux.git
synced 2025-12-10 05:29:38 +05:00
318 lines
10 KiB
Python
318 lines
10 KiB
Python
import os
|
|
import subprocess
|
|
import sys
|
|
from ui.mainwindow import MainWindowUI
|
|
from translations import gls
|
|
from PySide6.QtCore import Slot
|
|
from PySide6.QtGui import QAction, QKeySequence
|
|
from PySide6.QtWidgets import QFileDialog, QMessageBox
|
|
from src.installationthread import InstallationThread
|
|
from src.runaethread import RunAEThread
|
|
from src.runexethread import RunExeThread
|
|
from src.killaethread import KillAEThread
|
|
from src.pluginthread import PluginThread
|
|
from src.removeaethread import RemoveAEThread
|
|
from src.utils import (
|
|
check_aegnux_tip_marked, get_default_terminal, get_wine_bin_path_env,
|
|
get_cep_dir, get_ae_plugins_dir, get_wineprefix_dir,
|
|
check_aegnux_installed, mark_aegnux_tip_as_shown, get_ae_install_dir, get_aegnux_installation_dir
|
|
)
|
|
from src.types import DownloadMethod
|
|
|
|
|
|
class MainWindow(MainWindowUI):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
self.ran_from_aep_file = False
|
|
|
|
self.setWindowTitle(gls('welcome_win_title'))
|
|
self.install_button.clicked.connect(self.install_button_clicked)
|
|
self.run_button.clicked.connect(self.run_ae_button_clicked)
|
|
self.remove_aegnux_button.clicked.connect(self.remove_aegnux_button_clicked)
|
|
|
|
self.install_thread = InstallationThread()
|
|
self.install_thread.log_signal.connect(self._log)
|
|
self.install_thread.progress_signal.connect(self.progress_bar.setValue)
|
|
self.install_thread.finished_signal.connect(self._finished)
|
|
|
|
self.run_ae_thread = RunAEThread()
|
|
self.run_ae_thread.log_signal.connect(self._log)
|
|
self.run_ae_thread.finished_signal.connect(self._finished)
|
|
|
|
self.kill_ae_thread = KillAEThread()
|
|
self.remove_ae_thread = RemoveAEThread()
|
|
self.remove_ae_thread.finished_signal.connect(self._finished)
|
|
|
|
self.plugin_thread = PluginThread()
|
|
self.plugin_thread.log_signal.connect(self._log)
|
|
self.plugin_thread.progress_signal.connect(self.progress_bar.setValue)
|
|
self.plugin_thread.finished_signal.connect(self._finished)
|
|
|
|
self.alt_t_action = QAction(self)
|
|
self.alt_t_action.setShortcut(QKeySequence("Alt+T"))
|
|
self.alt_t_action.triggered.connect(self.run_command_alt_t)
|
|
self.addAction(self.alt_t_action)
|
|
|
|
self.ctrl_q_action = QAction(self)
|
|
self.ctrl_q_action.setShortcut(QKeySequence("Ctrl+Q"))
|
|
self.ctrl_q_action.triggered.connect(self.run_command_ctrl_q)
|
|
self.addAction(self.ctrl_q_action)
|
|
|
|
self._construct_menubar()
|
|
self.init_installation()
|
|
|
|
self.ae_action.triggered.connect(self.run_ae_button_clicked)
|
|
self.exe_action.triggered.connect(self.run_exe_button_clicked)
|
|
self.reg_action.triggered.connect(self.reg_button_clicked)
|
|
self.plugininst_action.triggered.connect(self.install_plugins_button_clicked)
|
|
self.kill_action.triggered.connect(self.kill_ae_button_clicked)
|
|
self.log_action.triggered.connect(self.toggle_logs)
|
|
self.term_action.triggered.connect(self.run_command_alt_t)
|
|
self.wpd_action.triggered.connect(self.wineprefix_folder_clicked)
|
|
self.plugind_action.triggered.connect(self.plugins_folder_clicked)
|
|
self.aed_action.triggered.connect(self.ae_folder_clicked)
|
|
self.aeg_action.triggered.connect(self.aegnux_folder_clicked)
|
|
self.cep_action.triggered.connect(self.cep_folder_clicked)
|
|
|
|
def try_autoopen_aep(self):
|
|
self.run_ae_thread.clear_aep_file_arg()
|
|
if self.ran_from_aep_file:
|
|
return
|
|
|
|
self.ran_from_aep_file = True
|
|
|
|
aep_file = ''
|
|
|
|
for arg in sys.argv:
|
|
if '.aep' in arg:
|
|
aep_file = arg
|
|
break
|
|
|
|
if aep_file == '':
|
|
return
|
|
|
|
self.run_ae_thread.add_aep_file_arg(aep_file)
|
|
self.run_ae_button_clicked()
|
|
|
|
def init_installation(self):
|
|
if check_aegnux_installed():
|
|
self.install_button.hide()
|
|
self.run_button.show()
|
|
self.remove_aegnux_button.show()
|
|
|
|
self.runMenu.setEnabled(True)
|
|
self.browseMenu.setEnabled(True)
|
|
self.kill_action.setEnabled(True)
|
|
self.plugininst_action.setEnabled(True)
|
|
self.term_action.setEnabled(True)
|
|
self.try_autoopen_aep()
|
|
|
|
else:
|
|
self.install_button.show()
|
|
self.run_button.hide()
|
|
self.remove_aegnux_button.hide()
|
|
|
|
self.runMenu.setEnabled(False)
|
|
self.browseMenu.setEnabled(False)
|
|
self.kill_action.setEnabled(False)
|
|
self.term_action.setEnabled(False)
|
|
self.plugininst_action.setEnabled(False)
|
|
|
|
def _construct_menubar(self):
|
|
self.runMenu = self.menuBar().addMenu(gls('run_menu'))
|
|
self.ae_action = self.runMenu.addAction(gls('ae_action'))
|
|
self.exe_action = self.runMenu.addAction(gls('exe_action'))
|
|
self.plugininst_action = self.runMenu.addAction(gls('plugininst_action'))
|
|
self.reg_action = self.runMenu.addAction(gls('reg_action'))
|
|
|
|
self.browseMenu = self.menuBar().addMenu(gls('browse_menu'))
|
|
self.wpd_action = self.browseMenu.addAction(gls('wpd_action'))
|
|
self.plugind_action = self.browseMenu.addAction(gls('plugind_action'))
|
|
self.aed_action = self.browseMenu.addAction(gls('aed_action'))
|
|
self.aeg_action = self.browseMenu.addAction(gls('aeg_action'))
|
|
self.cep_action = self.browseMenu.addAction(gls('cep_action'))
|
|
|
|
self.debugMenu = self.menuBar().addMenu(gls('debug_menu'))
|
|
self.kill_action = self.debugMenu.addAction(gls('kill_action'))
|
|
self.log_action = self.debugMenu.addAction(gls('log_action'))
|
|
self.term_action = self.debugMenu.addAction(gls('term_action'))
|
|
|
|
def lock_ui(self, lock: bool = True):
|
|
self.install_button.setEnabled(not lock)
|
|
self.run_button.setEnabled(not lock)
|
|
self.remove_aegnux_button.setEnabled(not lock)
|
|
|
|
self.runMenu.setEnabled(not lock)
|
|
|
|
@Slot()
|
|
def toggle_logs(self):
|
|
if self.logs_edit.isHidden():
|
|
self.logs_edit.show()
|
|
return
|
|
self.logs_edit.hide()
|
|
|
|
@Slot(bool)
|
|
def _finished(self, success: bool):
|
|
self.lock_ui(False)
|
|
self.progress_bar.hide()
|
|
self.init_installation()
|
|
|
|
if not success:
|
|
QMessageBox.critical(
|
|
self,
|
|
gls('error'),
|
|
self.logs_edit.toPlainText().split('\n')[-2]
|
|
)
|
|
return
|
|
|
|
if check_aegnux_installed() and not check_aegnux_tip_marked():
|
|
QMessageBox.information(self, '', gls('tip_alt_t'))
|
|
mark_aegnux_tip_as_shown()
|
|
|
|
|
|
@Slot(str)
|
|
def _log(self, message: str):
|
|
self.logs_edit.append(message + '\n')
|
|
|
|
@Slot()
|
|
def install_button_clicked(self):
|
|
# method = show_download_method_dialog(gls('installation_method_title'), gls('installation_method_text'))
|
|
|
|
method = DownloadMethod.OFFLINE
|
|
|
|
if method == DownloadMethod.CANCEL:
|
|
return
|
|
|
|
self.install_thread.set_download_method(method)
|
|
|
|
if method == DownloadMethod.OFFLINE:
|
|
QMessageBox.warning(
|
|
self,
|
|
gls('offline_note'),
|
|
gls('offline_note_text')
|
|
)
|
|
|
|
filename, _ = QFileDialog.getOpenFileName(
|
|
self,
|
|
gls('offline_ae_zip_title'),
|
|
"",
|
|
"Zip Files (*.zip);;All Files (*)"
|
|
)
|
|
if filename == '':
|
|
return
|
|
|
|
self.install_thread.set_offline_filename(filename)
|
|
|
|
self.lock_ui()
|
|
self.progress_bar.show()
|
|
self.install_thread.start()
|
|
|
|
@Slot()
|
|
def install_plugins_button_clicked(self):
|
|
QMessageBox.information(
|
|
self,
|
|
gls('plugin_note'),
|
|
gls('plugin_note_text')
|
|
)
|
|
|
|
filename, _ = QFileDialog.getOpenFileName(
|
|
self,
|
|
gls('offline_ae_zip_title'),
|
|
"",
|
|
"Zip Files (*.zip);;All Files (*)"
|
|
)
|
|
if filename == '':
|
|
return
|
|
|
|
self.plugin_thread.set_plugin_zip_filename(filename)
|
|
|
|
self.lock_ui()
|
|
self.progress_bar.show()
|
|
self.plugin_thread.start()
|
|
|
|
@Slot()
|
|
def run_ae_button_clicked(self):
|
|
self.lock_ui()
|
|
self.run_ae_thread.start()
|
|
|
|
@Slot()
|
|
def run_exe_button_clicked(self):
|
|
filename, _ = QFileDialog.getOpenFileName(
|
|
self,
|
|
gls('Open .exe'),
|
|
"",
|
|
"Exe Files (*.exe);;All Files (*)"
|
|
)
|
|
if filename == '':
|
|
return
|
|
|
|
self.run_exe_thread = RunExeThread([filename])
|
|
self.run_exe_thread.log_signal.connect(self._log)
|
|
self.run_exe_thread.finished_signal.connect(self._finished)
|
|
|
|
self.lock_ui()
|
|
self.run_exe_thread.start()
|
|
|
|
@Slot()
|
|
def reg_button_clicked(self):
|
|
filename, _ = QFileDialog.getOpenFileName(
|
|
self,
|
|
gls('Open .reg'),
|
|
"",
|
|
"Reg Files (*.reg);;All Files (*)"
|
|
)
|
|
if filename == '':
|
|
return
|
|
|
|
self.reg_thread = RunExeThread(['regedit', filename])
|
|
self.reg_thread.log_signal.connect(self._log)
|
|
self.reg_thread.finished_signal.connect(self._finished)
|
|
|
|
self.lock_ui()
|
|
self.reg_thread.start()
|
|
|
|
@Slot()
|
|
def kill_ae_button_clicked(self):
|
|
self.kill_ae_thread.start()
|
|
|
|
@Slot()
|
|
def remove_aegnux_button_clicked(self):
|
|
self.lock_ui()
|
|
self.remove_ae_thread.start()
|
|
|
|
@Slot()
|
|
def plugins_folder_clicked(self):
|
|
os.system(f'xdg-open "{get_ae_plugins_dir()}"')
|
|
|
|
@Slot()
|
|
def wineprefix_folder_clicked(self):
|
|
os.system(f'xdg-open "{get_wineprefix_dir()}"')
|
|
|
|
@Slot()
|
|
def ae_folder_clicked(self):
|
|
os.system(f'xdg-open "{get_ae_install_dir()}"')
|
|
|
|
@Slot()
|
|
def aegnux_folder_clicked(self):
|
|
os.system(f'xdg-open "{get_aegnux_installation_dir()}"')
|
|
|
|
@Slot()
|
|
def cep_folder_clicked(self):
|
|
os.system(f'xdg-open "{get_cep_dir()}"')
|
|
|
|
@Slot()
|
|
def run_command_alt_t(self):
|
|
env = os.environ.copy()
|
|
env['WINEPREFIX'] = get_wineprefix_dir()
|
|
env['PATH'] = get_wine_bin_path_env('/usr/bin')
|
|
|
|
try:
|
|
terminal = get_default_terminal()
|
|
subprocess.Popen([terminal, "bash"], env=env)
|
|
except RuntimeError as e:
|
|
print("[CRITICAL ERROR]:", e)
|
|
|
|
@Slot()
|
|
def run_command_ctrl_q(self):
|
|
exit() |