forked from Shinonome/althea
lift ios ver restriction; keyring fixes
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# althea
|
# althea
|
||||||
<img src="https://github.com/vyvir/althea/blob/main/resources/screenshot.png" alt="althea screenshot">
|
<img src="https://github.com/vyvir/althea/blob/main/resources/screenshot.png" alt="althea screenshot">
|
||||||
|
|
||||||
althea is a GUI for AltServer-Linux that allows to easily sideload apps onto an iPhone, an iPad, or an iPod Touch. It supports iOS 15 and later. althea supports x86_64, aarch64, and armv7.
|
althea is a GUI for AltServer-Linux that allows to easily sideload apps onto an iPhone, an iPad, or an iPod Touch. It supports x86_64, aarch64, and armv7.
|
||||||
|
|
||||||
This app is in a very early state, so if you're experiencing issues or want to help, you can create a [pull request](https://github.com/vyvir/althea/pulls), [report an issue](https://github.com/vyvir/althea/issues), or join [the Discord server](https://discord.gg/DZwRbyXq5Z).
|
This app is in a very early state, so if you're experiencing issues or want to help, you can create a [pull request](https://github.com/vyvir/althea/pulls), [report an issue](https://github.com/vyvir/althea/issues), or join [the Discord server](https://discord.gg/DZwRbyXq5Z).
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ That's it! Have fun with althea!
|
|||||||
|
|
||||||
## FAQ
|
## FAQ
|
||||||
|
|
||||||
### <b>Fedora 41 shows the following error:</b>
|
<b>Fedora 41 shows the following error:</b>
|
||||||
|
|
||||||
`ERROR: Device returned unhandled error code -5`
|
`ERROR: Device returned unhandled error code -5`
|
||||||
|
|
||||||
@@ -63,22 +63,6 @@ You can downgrade crypto policies to the previous Fedora version:
|
|||||||
|
|
||||||
`sudo update-crypto-policies --set FEDORA40`
|
`sudo update-crypto-policies --set FEDORA40`
|
||||||
|
|
||||||
### <b>Error No such object path '/modules/kwalletd'</b>
|
|
||||||
|
|
||||||
You can run the following commands:
|
|
||||||
|
|
||||||
```
|
|
||||||
python3 -m venv venv
|
|
||||||
source ./venv/bin/activate
|
|
||||||
pip install pygobject requests keyring
|
|
||||||
```
|
|
||||||
|
|
||||||
And then run althea:
|
|
||||||
|
|
||||||
```
|
|
||||||
python3 main.py
|
|
||||||
```
|
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
althea made by [vyvir](https://github.com/vyvir)
|
althea made by [vyvir](https://github.com/vyvir)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import threading
|
|||||||
import keyring
|
import keyring
|
||||||
from time import sleep
|
from time import sleep
|
||||||
import platform
|
import platform
|
||||||
|
from packaging import version
|
||||||
|
|
||||||
# PyGObject
|
# PyGObject
|
||||||
|
|
||||||
@@ -101,7 +102,7 @@ def menu():
|
|||||||
|
|
||||||
commands = [
|
commands = [
|
||||||
("About althea", on_abtdlg),
|
("About althea", on_abtdlg),
|
||||||
("Settings", lambda x: openwindow(SettingsWindow)),
|
#("Settings", lambda x: openwindow(SettingsWindow)),
|
||||||
("Install AltStore", altstoreinstall),
|
("Install AltStore", altstoreinstall),
|
||||||
("Install an IPA file", altserverfile),
|
("Install an IPA file", altserverfile),
|
||||||
("Pair", lambda x: openwindow(PairWindow)),
|
("Pair", lambda x: openwindow(PairWindow)),
|
||||||
@@ -167,10 +168,26 @@ def paircheck(): # Check if the device is paired already
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def altstoreinstall(_):
|
def altstoreinstall(_):
|
||||||
|
if version.parse(ios_version()) < version.parse("15.0"):
|
||||||
|
global Warnmsg
|
||||||
|
Warnmsg = f"""\niOS {ios_version()} is not supported by AltStore.\nThe lowest supported version is iOS 15.0.\nYou can still continue, but errors may occur.\n"""
|
||||||
|
ios_dialog = WarningDialog(parent=None)
|
||||||
|
ios_dialog.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
|
||||||
|
ios_response = ios_dialog.run()
|
||||||
|
if ios_response == Gtk.ResponseType.OK:
|
||||||
|
ios_dialog.destroy()
|
||||||
if paircheck():
|
if paircheck():
|
||||||
openwindow(PairWindow)
|
openwindow(PairWindow)
|
||||||
else:
|
else:
|
||||||
win1()
|
win1()
|
||||||
|
elif ios_response == Gtk.ResponseType.CANCEL:
|
||||||
|
ios_dialog.destroy()
|
||||||
|
else:
|
||||||
|
if paircheck():
|
||||||
|
openwindow(PairWindow)
|
||||||
|
else:
|
||||||
|
win1()
|
||||||
|
|
||||||
|
|
||||||
def altserverfile(_):
|
def altserverfile(_):
|
||||||
if paircheck():
|
if paircheck():
|
||||||
@@ -265,16 +282,22 @@ def use_saved_credentials():
|
|||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
|
|
||||||
def win1():
|
def win1():
|
||||||
|
try:
|
||||||
if keyring.get_password("althea", "apple_id"):
|
if keyring.get_password("althea", "apple_id"):
|
||||||
use_saved_credentials()
|
use_saved_credentials()
|
||||||
else:
|
else:
|
||||||
openwindow(Login)
|
openwindow(Login)
|
||||||
|
except keyring.errors.KeyringError:
|
||||||
|
openwindow(Login)
|
||||||
|
|
||||||
def win2(_):
|
def win2(_):
|
||||||
|
try:
|
||||||
if keyring.get_password("althea", "apple_id"):
|
if keyring.get_password("althea", "apple_id"):
|
||||||
use_saved_credentials()
|
use_saved_credentials()
|
||||||
else:
|
else:
|
||||||
openwindow(Login)
|
openwindow(Login)
|
||||||
|
except keyring.errors.KeyringError:
|
||||||
|
openwindow(Login)
|
||||||
|
|
||||||
def actionCallback(notification, action, user_data=None):
|
def actionCallback(notification, action, user_data=None):
|
||||||
Gtk.show_uri_on_window(
|
Gtk.show_uri_on_window(
|
||||||
@@ -522,6 +545,7 @@ class Login(Gtk.Window):
|
|||||||
|
|
||||||
def on_click_me_clicked(self, button):
|
def on_click_me_clicked(self, button):
|
||||||
silent_remove(f"{(altheapath)}/log.txt")
|
silent_remove(f"{(altheapath)}/log.txt")
|
||||||
|
try:
|
||||||
if not keyring.get_password("althea", "apple_id"):
|
if not keyring.get_password("althea", "apple_id"):
|
||||||
self.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
|
self.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
|
||||||
dialog = Gtk.MessageDialog(
|
dialog = Gtk.MessageDialog(
|
||||||
@@ -539,6 +563,8 @@ class Login(Gtk.Window):
|
|||||||
keyring.set_password("althea", "apple_id", apple_id)
|
keyring.set_password("althea", "apple_id", apple_id)
|
||||||
keyring.set_password("althea", "password", password)
|
keyring.set_password("althea", "password", password)
|
||||||
dialog.destroy()
|
dialog.destroy()
|
||||||
|
except keyring.errors.KeyringError:
|
||||||
|
pass
|
||||||
self.entry.set_progress_pulse_step(0.2)
|
self.entry.set_progress_pulse_step(0.2)
|
||||||
# Call self.do_pulse every 100 ms
|
# Call self.do_pulse every 100 ms
|
||||||
self.timeout_id = GLib.timeout_add(100, self.do_pulse, None)
|
self.timeout_id = GLib.timeout_add(100, self.do_pulse, None)
|
||||||
|
|||||||
Reference in New Issue
Block a user