From 9c3df58d9297de25f422140172c2d53ecbf939ca Mon Sep 17 00:00:00 2001 From: vyvir <135277623+vyvir@users.noreply.github.com> Date: Mon, 28 Oct 2024 19:19:25 +0200 Subject: [PATCH] PEP + settings --- main.py | 145 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 102 insertions(+), 43 deletions(-) diff --git a/main.py b/main.py index a2d145f..68204c7 100644 --- a/main.py +++ b/main.py @@ -54,12 +54,12 @@ def resource_path(relative_path): # Global variables -ipa_path_exists = False # Checks if the IPA path has been defined by user +ipa_path_exists = False savedcheck = False InsAltStore = subprocess.Popen( "test", stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True ) -lolcheck = "lol" # Redirects user either to login or to file chooser; If the "Pair" option was selected, it closes the dialog +login_or_file_chooser = "login" apple_id = "lol" password = "lol" Warnmsg = "warn" @@ -101,10 +101,11 @@ def menu(): commands = [ ("About althea", on_abtdlg), + ("Settings", lambda x: openwindow(SettingsWindow)), ("Install AltStore", altstoreinstall), ("Install an IPA file", altserverfile), ("Pair", lambda x: openwindow(PairWindow)), - ("Restart AltServer", restartaltserver), + ("Restart AltServer", restart_altserver), ("Quit althea", lambda x: quitit()) ] @@ -112,19 +113,20 @@ def menu(): command = Gtk.MenuItem(label=label) command.connect("activate", callback) menu.append(command) - if label == "About althea": + if label == "Settings": menu.append(Gtk.SeparatorMenuItem()) - #CheckRun11 = subprocess.run(f"test -e /usr/lib/althea/althea", shell=True) - #if CheckRun11.returncode == 0: - # global command_six - # CheckRun12 = subprocess.run( - # f"test -e $HOME/.config/autostart/althea.desktop", shell=True - # ) - # if CheckRun12.returncode == 0: - # command_six.set_active(command_six) - # command_six.connect("activate", launchatlogin1) - # menu.append(command_six) + CheckRun11 = subprocess.run(f"test -e /usr/lib/althea/althea", shell=True) + if installedcheck: + global command_six + CheckRun12 = subprocess.run( + f"test -e $HOME/.config/autostart/althea.desktop", shell=True + ) + if CheckRun12.returncode == 0: + command_six.set_active(command_six) + command_six.connect("activate", launchatlogin1) + menu.append(Gtk.SeparatorMenuItem()) + menu.append(command_six) menu.show_all() return menu @@ -166,16 +168,14 @@ def paircheck(): # Check if the device is paired already def altstoreinstall(_): if paircheck(): - global lolcheck - lolcheck = "altstr" openwindow(PairWindow) else: win1() def altserverfile(_): if paircheck(): - global lolcheck - lolcheck = "ipa" + global login_or_file_chooser + login_or_file_chooser = "file_chooser" openwindow(PairWindow) else: win2 = FileChooserWindow() @@ -228,7 +228,7 @@ def quitit(): Gtk.main_quit() os.kill(os.getpid(), signal.SIGKILL) -def restartaltserver(_): +def restart_altserver(_): subprocess.run(f"killall {AltServer}", shell=True) subprocess.run(f"killall {AnisetteServer}", shell=True) subprocess.run("idevicepair pair", shell=True) @@ -237,7 +237,7 @@ def restartaltserver(_): shell=True, ) -def winerm(): +def use_saved_credentials(): silent_remove(f"{(altheapath)}/log.txt") dialog = Gtk.MessageDialog( # transient_for=self, @@ -267,13 +267,13 @@ def winerm(): def win1(): if os.path.isfile(f"{(altheapath)}/saved.txt"): - winerm() + use_saved_credentials() else: openwindow(Login) def win2(_): if os.path.isfile(f"{(altheapath)}/saved.txt"): - winerm() + use_saved_credentials() else: openwindow(Login) @@ -461,12 +461,6 @@ class SplashScreen(Handy.Window): self.lbl1.set_text("Downloading AltServer...") self.loadalthea.set_fraction(0.6) - """ - r = requests.get( - "https://github.com/NyaMisty/AltServer-Linux/releases/download/v0.0.5/AltServer-x86_64", - allow_redirects=True, - ) - """ if computer_cpu_platform == 'AMD64': r = requests.get( "https://github.com/NyaMisty/AltServer-Linux/releases/download/v0.0.5/AltServer-x86_64", @@ -603,10 +597,10 @@ class Login(Gtk.Window):# stdout=subprocess.PIPE, shell=True, ) - else: # If the iOS version is lower than 15.0, AltServer-Linux won't run + else: global Failmsg Failmsg = "iOS 15.0 or later is required." - dialog2 = DialogExample3(self) + dialog2 = FailDialog(self) dialog2.run() dialog2.destroy() self.destroy() @@ -638,7 +632,7 @@ class Login(Gtk.Window):# Failmsg = subprocess.check_output( f"tail -6 {(altheapath)}/log.txt", shell=True ).decode() - dialog2 = DialogExample3(self) + dialog2 = FailDialog(self) dialog2.run() dialog2.destroy() self.destroy() @@ -656,7 +650,7 @@ class Login(Gtk.Window):# f"tail -8 {('$HOME/.local/share/althea/log.txt')}", shell=True, ).decode() - dialog1 = DialogExample2(self) + dialog1 = WarningDialog(self) response1 = dialog1.run() if response1 == Gtk.ResponseType.OK: dialog1.destroy() @@ -672,7 +666,7 @@ class Login(Gtk.Window):# Installing = True elif Check2fa.returncode == 0 and TwoFactorTime == 0: Installing = False - dialog = DialogExample(self) + dialog = VerificationDialog(self) response = dialog.run() if response == Gtk.ResponseType.OK: vercode = dialog.entry2.get_text() @@ -801,19 +795,19 @@ class PairWindow(Handy.Window): ["idevicepair pair"], shell=True, check=True, capture_output=True ) self.destroy() - global lolcheck + global login_or_file_chooser global PATH - if lolcheck == "altstr": + if login_or_file_chooser == "file_chooser": + win2 = FileChooserWindow() + else: PATH = f"{(altheapath)}/AltStore.ipa" win1() - elif lolcheck == "ipa": - win2 = FileChooserWindow() global ipa_path_exists if ipa_path_exists == True: PATH = win2.PATHFILE win1() ipa_path_exists = False - lolcheck = "lol" + login_or_file_chooser = "login" except subprocess.CalledProcessError as e: errormsg = e.output.decode("utf-8") dialog1 = Gtk.MessageDialog( @@ -833,7 +827,7 @@ class PairWindow(Handy.Window): class FileChooserWindow(Gtk.Window): def __init__(self): - super().__init__(title="FileChooser Example") + super().__init__(title="File chooser") box = Gtk.Box() self.add(box) @@ -871,7 +865,7 @@ class FileChooserWindow(Gtk.Window): dialog.add_filter(filter_any) -class DialogExample(Gtk.Dialog): +class VerificationDialog(Gtk.Dialog): def __init__(self, parent): if not savedcheck: super().__init__(title="Verification code", transient_for=parent, flags=0) @@ -884,7 +878,7 @@ class DialogExample(Gtk.Dialog): Gtk.STOCK_OK, Gtk.ResponseType.OK, ) - self.set_resizable(False) + self.set_resizable(True) self.set_border_width(10) labelhelp = Gtk.Label( @@ -900,7 +894,7 @@ class DialogExample(Gtk.Dialog): self.show_all() -class DialogExample2(Gtk.Dialog): +class WarningDialog(Gtk.Dialog): def __init__(self, parent): global Warnmsg super().__init__(title="Warning", transient_for=parent, flags=0) @@ -926,7 +920,7 @@ class DialogExample2(Gtk.Dialog): self.show_all() -class DialogExample3(Gtk.Dialog): +class FailDialog(Gtk.Dialog): def __init__(self, parent): global Failmsg super().__init__(title="Fail", transient_for=parent, flags=0) @@ -1058,6 +1052,71 @@ class OopsInternet(Handy.Window): def on_info_clicked2(self, widget): quitit() +class SettingsWindow(Handy.Window): + def __init__(self): + super().__init__(title="Settings") + self.present() + self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) + self.set_resizable(False) + #self.set_size_request(450, 100) + self.set_border_width(10) + + # WindowHandle + handle = Handy.WindowHandle() + self.add(handle) + box = Gtk.VBox() + vb = Gtk.VBox(spacing=0, orientation=Gtk.Orientation.VERTICAL) + + # Headerbar + self.hb = Handy.HeaderBar() + self.hb.set_show_close_button(True) + self.hb.props.title = "Settings" + vb.pack_start(self.hb, False, True, 0) + + pixbuf = Gtk.IconTheme.get_default().load_icon( + "emblem-system-symbolic", 48, 0 + ) + image = Gtk.Image.new_from_pixbuf(pixbuf) + image.show() + image.set_margin_top(10) + vb.pack_start(image, True, True, 0) + + lbl1 = Gtk.Label() + lbl1.set_justify(Gtk.Justification.CENTER) + lbl1.set_markup( + "These settings are experimental. Use at own risk." + ) + lbl1.set_property("margin_left", 15) + lbl1.set_property("margin_right", 15) + lbl1.set_margin_top(10) + + button = Gtk.Button(label="OK") + button.set_property("margin_left", 125) + button.set_property("margin_right", 125) + button.connect("clicked", self.on_info_clicked2) + + button1 = Gtk.Button(label="Open PairWindow") + button1.set_property("margin_left", 125) + button1.set_property("margin_right", 125) + button1.connect("clicked", self.on_info_clicked3) + + handle.add(vb) + vb.pack_start(lbl1, expand=False, fill=True, padding=0) + vb.pack_start(button, False, False, 10) + vb.pack_start(button1, False, False, 10) + box.add(vb) + self.add(box) + self.show_all() + + def on_info_clicked2(self, widget): + self.destroy() + + def on_info_clicked3(self, widget): + openwindow(PairWindow) + + +# ----------------------------------------------------------------------------- + # Main function def main(): GLib.set_prgname("althea") # Sets the global program name