Skip to content

Commit

Permalink
Eclipse compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
KostromDan committed Apr 24, 2024
1 parent 0fed81b commit fc08a3a
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 12 deletions.
11 changes: 9 additions & 2 deletions MDGUi/forms/MDGResultWindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,21 @@ li.checked::marker { content: "\2612"; }
</sizepolicy>
</property>
<property name="text">
<string>Open in IntelliJ IDEA as project:</string>
<string>Open merged_mdk in IDE as project:</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="intellij_idea_button">
<property name="text">
<string>merged_mdk</string>
<string>IntelliJ IDEA</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="eclipse_button">
<property name="text">
<string>Eclipse</string>
</property>
</widget>
</item>
Expand Down
10 changes: 8 additions & 2 deletions MDGUi/generated/Ui_MDGResultWindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@ def setupUi(self, MDGResultWindow):

self.horizontalLayout_3.addWidget(self.intellij_idea_button)

self.eclipse_button = QPushButton(self.centralwidget)
self.eclipse_button.setObjectName(u"eclipse_button")

self.horizontalLayout_3.addWidget(self.eclipse_button)


self.verticalLayout.addLayout(self.horizontalLayout_3)

Expand Down Expand Up @@ -144,8 +149,9 @@ def retranslateUi(self, MDGResultWindow):
self.deobfuscated_mods_button.setText(QCoreApplication.translate("MDGResultWindow", u"deobfuscated_mods", None))
self.decompiled_mods_button.setText(QCoreApplication.translate("MDGResultWindow", u"decompiled_mods", None))
self.merged_mdk_button.setText(QCoreApplication.translate("MDGResultWindow", u"merged_mdk", None))
self.label_2.setText(QCoreApplication.translate("MDGResultWindow", u"Open in IntelliJ IDEA as project:", None))
self.intellij_idea_button.setText(QCoreApplication.translate("MDGResultWindow", u"merged_mdk", None))
self.label_2.setText(QCoreApplication.translate("MDGResultWindow", u"Open merged_mdk in IDE as project:", None))
self.intellij_idea_button.setText(QCoreApplication.translate("MDGResultWindow", u"IntelliJ IDEA", None))
self.eclipse_button.setText(QCoreApplication.translate("MDGResultWindow", u"Eclipse", None))
self.open_log_button.setText(QCoreApplication.translate("MDGResultWindow", u"open log", None))
self.close_button.setText(QCoreApplication.translate("MDGResultWindow", u"close", None))
self.exit_button.setText(QCoreApplication.translate("MDGResultWindow", u"exit", None))
Expand Down
48 changes: 40 additions & 8 deletions MDGUtil/PathUtils.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import locale
import os
import platform
import re
import subprocess
import sys
from pathlib import Path

import win32com.client
import winshell

from MDGUtil.MDGLogger import MDGLogger

Expand Down Expand Up @@ -71,12 +76,12 @@ def get_all_java_homes() -> list[str]:
global java_homes
if java_homes is not None:
return java_homes
java_homes = list()
java_homes = set()

"""JAVA_HOME"""
java_home = os.environ.get('JAVA_HOME', '')
if java_home != '':
java_homes.append(java_home.rstrip('/\\'))
java_homes.add(java_home.rstrip('/\\'))

"""java cmd"""
try:
Expand All @@ -85,8 +90,7 @@ def get_all_java_homes() -> list[str]:
for line in output_lines:
if line.strip().startswith('java.home'):
java_path = line.split('=', 1)[1].strip().rstrip('/\\')
if java_path not in java_homes:
java_homes.append(java_path)
java_homes.add(java_path)
except Exception:
pass

Expand All @@ -97,8 +101,7 @@ def get_all_java_homes() -> list[str]:
java_path = os.path.join(path, 'java.exe')
if os.path.exists(java_path):
java_home = os.path.dirname(os.path.dirname(java_path))
if java_home not in java_homes:
java_homes.append(java_home.rstrip('/\\'))
java_homes.add(java_home.rstrip('/\\'))
except KeyError:
pass

Expand All @@ -112,13 +115,42 @@ def get_all_java_homes() -> list[str]:
line = line.replace('bin\\javaw.exe', 'bin\\java.exe')
if 'bin\\java.exe' in line:
java_path = line.split('=')[1].split('bin\\java.exe')[0].strip('"\\')
if java_path not in java_homes:
java_homes.append(java_path)
java_homes.add(java_path)
except Exception:
pass
java_homes = list(java_homes)
return java_homes


def get_all_programs() -> list[str]:
paths = set()

"""Start Menu/Programs"""
programs_paths = {r'C:\ProgramData\Microsoft\Windows\Start Menu\Programs',
os.path.join(os.environ["userprofile"], "Start Menu", "Programs"),
winshell.programs()}
for programs_path in programs_paths:
if not os.path.isdir(programs_path):
continue
for lnk_path in Path(programs_path).rglob('*.lnk'):
shell = win32com.client.Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(str(lnk_path))
paths.add(shortcut.Targetpath)

"""wmic"""
p = subprocess.Popen(['wmic', 'process', 'get', 'executablepath'], shell=True, stdout=subprocess.PIPE, )
stdout = p.communicate()[0].decode(locale.getpreferredencoding())
arr = [i.strip() for i in stdout.split('\n') if i.strip() not in ['ExecutablePath', '']]
for i in arr:
paths.add(i)

return list(paths)


def get_eclipse_paths() -> list[str]:
return list(filter(lambda p: p.endswith('eclipse.exe'), get_all_programs()))


def get_java_home() -> str:
java_homes = get_all_java_homes()
return java_homes[0] if java_homes else ''
Expand Down
15 changes: 15 additions & 0 deletions MDGWindow/MDGResultWindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,14 @@ def __init__(self, progress_window) -> None:
if not os.path.exists(PathUtils.MERGED_MDK_PATH):
self.ui.merged_mdk_button.setEnabled(False)
self.ui.intellij_idea_button.setEnabled(False)
self.ui.eclipse_button.setEnabled(False)

self.ui.close_button.clicked.connect(self.hide)
self.ui.deobfuscated_mods_button.clicked.connect(lambda e: self.open_folder(PathUtils.DEOBFUSCATED_MODS_PATH))
self.ui.decompiled_mods_button.clicked.connect(lambda e: self.open_folder(PathUtils.DECOMPILED_MODS_PATH))
self.ui.merged_mdk_button.clicked.connect(lambda e: self.open_folder(PathUtils.MERGED_MDK_PATH))
self.ui.intellij_idea_button.clicked.connect(self.intellij_idea_button)
self.ui.eclipse_button.clicked.connect(self.eclipse_button)
self.ui.exit_button.clicked.connect(self.exit_button)
self.ui.close_button.clicked.connect(self.close_button)
self.ui.open_log_button.clicked.connect(PathUtils.open_log)
Expand Down Expand Up @@ -65,6 +67,19 @@ def intellij_idea_button(self) -> None:
'due to "idea64.exe" not found!',
QMessageBox.StandardButton.Ok)

def eclipse_button(self) -> None:
eclipse_paths = PathUtils.get_eclipse_paths()
if not eclipse_paths:
QMessageBox.warning(self, 'Eclipse not found',
f"Can't open {PathUtils.MERGED_MDK_PATH} as project in Eclipse\n"
'due to "eclipse.exe" not found in Start Menu\\Programs!',
QMessageBox.StandardButton.Ok)
return
try:
subprocess.Popen([eclipse_paths[0], PathUtils.MERGED_MDK_PATH])
except FileNotFoundError:
pass

def close_button(self) -> None:
self.progress_window.setEnabled(True)
self.progress_window.show()
Expand Down

0 comments on commit fc08a3a

Please sign in to comment.