mirror of
https://github.com/vyvir/althea.git
synced 2026-06-05 14:59:30 -05:00
0.5.0 2/4
This commit is contained in:
@@ -1,105 +1,50 @@
|
||||
# ⚠️UNMAINTAINED/DEPRECATED⚠️
|
||||
Currently, we are undergoing the process of privately testing and preparing a V2 release of AltLinux, the current public version (V1) has been deprecated, and is no longer guaranteed to work. We apologize for the inconvenience.
|
||||
### FAQ
|
||||
> When will AltLinux V2 be released?
|
||||
|
||||
Our team is currently facing some challenges with respect to the release date of V2. Recently, one of our core members became inactive, while we only have one active developer capable of working on the project right now. As a result, the timeline for its launch remains uncertain.
|
||||
> V1 isn't working, how can I get support?
|
||||
|
||||
We no longer provide support for this version of AltLinux. If you need to sideload apps, we recommend using the official AltStore repo for the timebeing, using windows.
|
||||
> I would like updates/I have a question about AltLinux
|
||||
|
||||
Please join [the Discord server](https://discord.gg/DZwRbyXq5Z) and we will be happy to answer any inquiries you may have.
|
||||
# AltLinux
|
||||
<img src="https://github.com/i-love-altlinux/AltLinux/blob/main/resources/4.png" alt="AltLinux Logo">
|
||||
|
||||
AltLinux is a GUI for AltServer-Linux that allows to easily sideload apps onto an iPhone, an iPad, or an iPod Touch. It supports iOS 12.2 and later.
|
||||
AltLinux 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.
|
||||
|
||||
Features:
|
||||
- A straightforward GUI
|
||||
- A tray menu that works just like on Windows
|
||||
- Sideloading AltStore
|
||||
- Sideloading apps without AltStore
|
||||
- While the tray icon is present, AltServer runs in the background in tethered mode
|
||||
- Launching the tray icon on start-up
|
||||
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/i-love-altlinux/AltLinux/pulls), [report an issue](https://github.com/i-love-altlinux/AltLinux/issues), or join [the Discord server](https://discord.gg/DZwRbyXq5Z).
|
||||
|
||||
The program is in its very early state, so if you're experiencing issues or want to help, you can join [the Discord server](https://discord.gg/DZwRbyXq5Z).
|
||||
## Instructions
|
||||
|
||||
## Install AltLinux
|
||||
⚠️ (Note: This version of AltLinux is deprecated, we cannot guarentee these instructions will work as intended) ⚠️
|
||||
### Ubuntu
|
||||
|
||||
AltLinux is available for Ubuntu 22.04 and Ubuntu 20.04.
|
||||
Install the latest version from [releases](https://github.com/i-love-altlinux/AltLinux/releases/latest).
|
||||
|
||||
Derivatives, such as Linux Mint and Pop!_ OS should also work. To make sure which DEB package to pick, run the following command:
|
||||
### Other Linux distributions
|
||||
|
||||
#### Dependencies
|
||||
|
||||
Ubuntu:
|
||||
```
|
||||
python3 --version
|
||||
sudo apt install software-properties-common
|
||||
```
|
||||
|
||||
| Python 3.10 | Python 3.8 |
|
||||
|:--------------------:|:-----------------:|
|
||||
| Ubuntu 22.04 | Ubuntu 20.04 |
|
||||
| Pop!_OS 22.04 | Pop!_OS 20.04 |
|
||||
| Linux Mint 21 | Linux Mint 20 |
|
||||
| elementary OS 7 | elementary OS 6 |
|
||||
| Zorin OS 17 | Zorin OS 16 |
|
||||
|
||||
If you're running Ubuntu 22.04 or any distro based on it (such as Mint 21), install the DEB package [from here](https://github.com/i-love-altlinux/AltLinux/releases).
|
||||
|
||||
If you're running Ubuntu 20.04 or any distro based on it (such as Mint 20), run the following commands:
|
||||
```
|
||||
sudo add-apt-repository ppa:apandada1/libhandy-1
|
||||
sudo apt update
|
||||
sudo apt install libhandy-1-0 libhandy-1-dev
|
||||
```
|
||||
|
||||
Then you can install the DEB package [from here](https://github.com/i-love-altlinux/AltLinux/releases).
|
||||
|
||||
If you use Arch Linux, you can use [the AUR package](https://aur.archlinux.org/packages/altlinux).
|
||||
|
||||
There is also a [git version](https://aur.archlinux.org/packages/altlinux-git) of AltLinux available as an AUR package.
|
||||
|
||||
If you use Fedora, you can [run the script without installing](#run-the-script-without-installing).
|
||||
|
||||
## Uninstall AltLinux
|
||||
|
||||
If you want to uninstall AltLinux, run the following commands:
|
||||
|
||||
```
|
||||
sudo apt purge altlinux
|
||||
```
|
||||
|
||||
```
|
||||
sudo rm -rf /usr/lib/altlinux
|
||||
```
|
||||
|
||||
```
|
||||
rm -rf $HOME/.local/share/altlinux
|
||||
```
|
||||
|
||||
## Run the script without installing
|
||||
|
||||
### Ubuntu:
|
||||
|
||||
Add the `universe` repository:
|
||||
|
||||
```
|
||||
sudo add-apt-repository universe -y
|
||||
```
|
||||
|
||||
Install the dependencies:
|
||||
```
|
||||
sudo apt-get install binutils python3-pip git gir1.2-appindicator3-0.1 usbmuxd libimobiledevice6 libimobiledevice-utils wget curl libavahi-compat-libdnssd-dev zlib1g-dev unzip usbutils
|
||||
sudo apt-get install binutils python3-pip git gir1.2-appindicator3-0.1 usbmuxd libimobiledevice6 libimobiledevice-utils wget curl libavahi-compat-libdnssd-dev zlib1g-dev unzip usbutils libhandy-1-dev gir1.2-notify-0.7 python3-requests psmisc
|
||||
```
|
||||
|
||||
IF YOU'RE RUNNING UBUNTU 20.04 OR ITS [DERIVATIVES](https://github.com/i-love-altlinux/AltLinux#install-altlinux):
|
||||
Fedora:
|
||||
```
|
||||
sudo add-apt-repository ppa:apandada1/libhandy-1
|
||||
sudo apt update
|
||||
sudo apt install libhandy-1-0 libhandy-1-dev
|
||||
sudo dnf install binutils python3-pip git libappindicator-gtk3 usbmuxd libimobiledevice-devel libimobiledevice-utils wget curl avahi-compat-libdns_sd-devel dnf-plugins-core unzip usbutils psmisc
|
||||
```
|
||||
Arch Linux:
|
||||
```
|
||||
sudo pacman -S binutils wget curl git python-pip libappindicator-gtk3 usbmuxd libimobiledevice avahi zlib unzip usbutils psmisc
|
||||
```
|
||||
|
||||
Run the following commands:
|
||||
OpenSUSE:
|
||||
```
|
||||
sudo zypper in binutils wget curl git python311-gobject-Gdk libhandy-devel libappindicator3-1 typelib-1_0-AppIndicator3-0_1 imobiledevice-tools libdns_sd libnotify-devel psmisc
|
||||
```
|
||||
|
||||
#### Running AltLinux
|
||||
|
||||
Once the dependencies are installed, run the following commands:
|
||||
```
|
||||
git clone https://github.com/i-love-altlinux/AltLinux
|
||||
```
|
||||
@@ -112,56 +57,28 @@ cd AltLinux
|
||||
python3 main.py
|
||||
```
|
||||
|
||||
### Fedora:
|
||||
|
||||
Install the dependencies:
|
||||
Note: if you're running OpenSUSE Leap, run the following command instead:
|
||||
```
|
||||
sudo dnf install binutils python3-pip git libappindicator-gtk3 usbmuxd libimobiledevice-devel libimobiledevice-utils wget curl avahi-compat-libdns_sd-devel dnf-plugins-core unzip usbutils
|
||||
```
|
||||
|
||||
Run the following commands:
|
||||
```
|
||||
git clone https://github.com/i-love-altlinux/AltLinux
|
||||
```
|
||||
|
||||
```
|
||||
cd AltLinux
|
||||
```
|
||||
|
||||
```
|
||||
python3 main.py
|
||||
```
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Install the dependencies:
|
||||
```
|
||||
sudo pacman -S binutils wget curl git python-pip libappindicator-gtk3 usbmuxd libimobiledevice avahi zlib unzip usbutils
|
||||
```
|
||||
|
||||
Run the following commands:
|
||||
```
|
||||
git clone https://github.com/i-love-altlinux/AltLinux
|
||||
```
|
||||
|
||||
```
|
||||
cd AltLinux
|
||||
```
|
||||
|
||||
```
|
||||
python3 main.py
|
||||
python3.11 main.py
|
||||
```
|
||||
|
||||
## Compile the DEB package
|
||||
|
||||
Feel free to create a [pull request](https://github.com/i-love-altlinux/AltLinux/pulls) or [report an issue](https://github.com/i-love-altlinux/AltLinux/issues).
|
||||
|
||||
Add the `universe` repository:
|
||||
|
||||
```
|
||||
sudo apt install software-properties-common
|
||||
```
|
||||
|
||||
```
|
||||
sudo add-apt-repository universe -y
|
||||
```
|
||||
|
||||
Install the dependencies:
|
||||
```
|
||||
sudo apt-get install binutils python3-pip git gir1.2-appindicator3-0.1 usbmuxd libimobiledevice6 libimobiledevice-utils wget curl libavahi-compat-libdnssd-dev zlib1g-dev unzip usbutils
|
||||
sudo apt-get install binutils python3-pip git gir1.2-appindicator3-0.1 usbmuxd libimobiledevice6 libimobiledevice-utils wget curl libavahi-compat-libdnssd-dev zlib1g-dev unzip usbutils libhandy-1-dev gir1.2-notify-0.7 python3-requests psmisc pipx
|
||||
```
|
||||
|
||||
If you're running Ubuntu 20.04 or any distro based on it (such as Mint 20), run the following commands:
|
||||
@@ -173,10 +90,16 @@ sudo apt install libhandy-1-0 libhandy-1-dev
|
||||
|
||||
Install pyinstaller:
|
||||
|
||||
Ubuntu 22.04:
|
||||
```
|
||||
pip3 install pyinstaller
|
||||
```
|
||||
|
||||
Ubuntu 24.04:
|
||||
```
|
||||
pip3 install pyinstaller --break-system-packages
|
||||
```
|
||||
|
||||
Reboot your computer for changes to take effect.
|
||||
|
||||
After that, proceed by running the following commands:
|
||||
@@ -195,8 +118,11 @@ cd AltLinux
|
||||
The DEB file is ready! You can install it now.
|
||||
|
||||
## Credits
|
||||
|
||||
AltLinux made by [vyvir](https://github.com/vyvir)
|
||||
|
||||
AltServer-Linux made by [NyaMisty](https://github.com/NyaMisty)
|
||||
|
||||
Artwork by [Nebula](https://github.com/itsnebulalol)
|
||||
|
||||
Provision by [Dadoum](https://github.com/Dadoum)
|
||||
|
||||
Artwork by [Nebula](https://github.com/itsnebulalol)
|
||||
|
||||
@@ -3,20 +3,28 @@ import os
|
||||
import errno
|
||||
from re import T
|
||||
from shutil import rmtree
|
||||
import gi
|
||||
import json
|
||||
import urllib.request
|
||||
from urllib.request import urlopen
|
||||
import urllib.parse
|
||||
import requests
|
||||
import subprocess
|
||||
import signal
|
||||
import threading
|
||||
from time import sleep
|
||||
|
||||
# PyGObject
|
||||
|
||||
import gi
|
||||
gi.require_version("Gtk", "3.0")
|
||||
gi.require_version("Handy", "1")
|
||||
gi.require_version("AppIndicator3", "0.1")
|
||||
gi.require_version("Notify", "0.7")
|
||||
from gi.repository import Gtk, AppIndicator3 as appindicator
|
||||
try:
|
||||
gi.require_version("AppIndicator3", "0.1")
|
||||
from gi.repository import Gtk, AppIndicator3 as appindicator
|
||||
except ValueError: # Fix for Solus and other Ayatana users
|
||||
gi.require_version('AyatanaAppIndicator3', '0.1')
|
||||
from gi.repository import Gtk, AyatanaAppIndicator3 as appindicator
|
||||
from gi.repository import GLib
|
||||
from gi.repository import GObject, Handy
|
||||
from gi.repository import GdkPixbuf
|
||||
@@ -27,21 +35,20 @@ GObject.type_ensure(Handy.ActionRow)
|
||||
|
||||
installedcheck = False
|
||||
|
||||
|
||||
def resource_path(relative_path):
|
||||
global installedcheck
|
||||
CheckRun10 = subprocess.run(
|
||||
f"find /usr/lib/altlinux/altlinux 2>/dev/null >dev/null", shell=True
|
||||
f"find /usr/lib/altlinux/altlinux > /dev/null 2>&1", shell=True
|
||||
)
|
||||
if CheckRun10.returncode == 0:
|
||||
installedcheck = True
|
||||
base_path = "/usr/lib/altlinux/altlinux"
|
||||
base_path = "/usr/lib/altlinux"
|
||||
else:
|
||||
base_path = os.path.abspath(".")
|
||||
return os.path.join(base_path, relative_path)
|
||||
|
||||
|
||||
# List of global variables
|
||||
# Global variables
|
||||
ermcheck = False # Checks if the IPA path has been defined by user
|
||||
savedcheck = False
|
||||
InsAltStore = subprocess.Popen(
|
||||
@@ -52,12 +59,10 @@ AppleID = "lol"
|
||||
Password = "lol"
|
||||
Warnmsg = "warn"
|
||||
Failmsg = "fail"
|
||||
file_name = resource_path("resources/1.png")
|
||||
icon_name = "view-conceal-symbolic.symbolic"
|
||||
icon_name = "changes-prevent-symbolic"
|
||||
command_six = Gtk.CheckMenuItem(label="Launch at Login")
|
||||
AppIcon = resource_path("resources/2.png")
|
||||
AltServer = "$HOME/.local/share/altlinux/AltServer"
|
||||
AnisetteServer = "$HOME/.local/share/altlinux/anisette_server"
|
||||
AnisetteServer = "$HOME/.local/share/altlinux/anisette-server"
|
||||
AltStore = "$HOME/.local/share/altlinux/AltStore.ipa"
|
||||
PATH = AltStore
|
||||
AutoStart = resource_path("resources/AutoStart.sh")
|
||||
@@ -79,56 +84,24 @@ def connectioncheck():
|
||||
with open(resource_path("resources/version"), "r", encoding="utf-8") as f:
|
||||
LocalVersion = f.readline().strip()
|
||||
|
||||
|
||||
def main():
|
||||
GLib.set_prgname("AltLinux") # Sets the global program name
|
||||
global altlinuxpath
|
||||
global file_name
|
||||
#global file_name
|
||||
if not os.path.exists(altlinuxpath): # Creates $HOME/.local/share/altlinux
|
||||
os.mkdir(altlinuxpath)
|
||||
global installedcheck
|
||||
command1 = 'echo $XDG_CURRENT_DESKTOP | grep -q "GNOME"' # Check if the current DE is GNOME
|
||||
CheckRun8 = subprocess.run(command1, shell=True)
|
||||
if CheckRun8.returncode == 0:
|
||||
file_name = resource_path("resources/1.png") # If GNOME, use the b&w tray icon
|
||||
else:
|
||||
command2 = 'echo $XDG_CURRENT_DESKTOP | grep -q "X-Cinnamon"' # Check if the current DE is Cinnamon
|
||||
CheckRunLol = subprocess.run(command2, shell=True)
|
||||
if CheckRunLol.returncode == 0:
|
||||
file_name = resource_path(
|
||||
"resources/1.png"
|
||||
) # If Cinnamon, use the b&w tray icon
|
||||
else:
|
||||
file_name = resource_path(
|
||||
"resources/2.png"
|
||||
) # If other DE, use a colored tray icon
|
||||
if CheckRun8.returncode == 1 or (
|
||||
CheckRun8.returncode == 0 and Gtk.StatusIcon.is_embedded
|
||||
):
|
||||
if Gtk.StatusIcon.is_embedded:
|
||||
if connectioncheck():
|
||||
global indicator
|
||||
indicator = appindicator.Indicator.new(
|
||||
"customtray",
|
||||
os.path.abspath(file_name),
|
||||
"altlinux-tray-icon",
|
||||
resource_path("resources/1.png"),
|
||||
appindicator.IndicatorCategory.APPLICATION_STATUS,
|
||||
)
|
||||
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
|
||||
indicator.set_menu(menu())
|
||||
indicator.set_status(appindicator.IndicatorStatus.PASSIVE)
|
||||
if (
|
||||
not os.path.isfile(f"{(altlinuxpath)}/AltServer")
|
||||
or not os.path.isfile(f"{(altlinuxpath)}/AltStore.ipa")
|
||||
or not os.path.isfile(f"{(altlinuxpath)}/anisette_server")
|
||||
):
|
||||
# If AltServer or AltStore aren't present, show splash screen
|
||||
openwindow(SplashScreen)
|
||||
else:
|
||||
# If AltServer or AltStore are present, don't show splash screen
|
||||
subprocess.run(
|
||||
f"""export ALTSERVER_ANISETTE_SERVER='http://127.0.0.1:6969' & {(altlinuxpath)}/AltServer &""",
|
||||
shell=True,
|
||||
)
|
||||
indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
|
||||
openwindow(SplashScreen)
|
||||
else:
|
||||
openwindow(OopsInternet) # Notify the user there is no Internet connection
|
||||
else:
|
||||
@@ -199,10 +172,10 @@ def on_abtdlg(self):
|
||||
)
|
||||
about.set_logo(pixbuf)
|
||||
about.set_program_name("AltLinux")
|
||||
about.set_version("0.4.2-2")
|
||||
about.set_version("0.5.0")
|
||||
about.set_authors(
|
||||
[
|
||||
"maxasix",
|
||||
"vyvir",
|
||||
"AltServer-Linux",
|
||||
"made by NyaMisty",
|
||||
"Provision",
|
||||
@@ -213,7 +186,7 @@ def on_abtdlg(self):
|
||||
about.set_comments("A GUI for AltServer-Linux written in Python.")
|
||||
about.set_website("https://github.com/i-love-altlinux/AltLinux")
|
||||
about.set_website_label("Github")
|
||||
about.set_copyright("GUI by maxasix")
|
||||
about.set_copyright("GUI by vyvir")
|
||||
about.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
|
||||
about.run()
|
||||
about.destroy()
|
||||
@@ -296,20 +269,19 @@ class SplashScreen(Handy.Window):
|
||||
GLib.timeout_add(200, self.wait_for_t, self.t)
|
||||
|
||||
def lol321actualfunction(self):
|
||||
global installedcheck
|
||||
self.lbl1.set_text("Checking if anisette_server is already running...")
|
||||
self.lbl1.set_text("Checking if anisette-server is already running...")
|
||||
self.loadaltlinux.set_fraction(0.1)
|
||||
command = 'curl 127.0.0.1:6969 | grep -q "{"'
|
||||
CheckRun = subprocess.run(command, shell=True)
|
||||
if not os.path.isfile(f"{(altlinuxpath)}/anisette_server"):
|
||||
self.lbl1.set_text("Downloading anisette_server...")
|
||||
if not os.path.isfile(f"{(altlinuxpath)}/anisette-server"):
|
||||
self.lbl1.set_text("Downloading anisette-server...")
|
||||
r = requests.get(
|
||||
"https://github.com/Dadoum/Provision/releases/download/2.1.0/anisette_server-x86_64",
|
||||
"https://github.com/i-love-altlinux/AltLinux/releases/download/0.5.0/anisette-server-x86_64",
|
||||
allow_redirects=True,
|
||||
)
|
||||
open(f"{(altlinuxpath)}/anisette_server", "wb").write(r.content)
|
||||
subprocess.run(f"chmod +x {(altlinuxpath)}/anisette_server", shell=True)
|
||||
subprocess.run(f"chmod 755 {(altlinuxpath)}/anisette_server", shell=True)
|
||||
open(f"{(altlinuxpath)}/anisette-server", "wb").write(r.content)
|
||||
subprocess.run(f"chmod +x {(altlinuxpath)}/anisette-server", shell=True)
|
||||
subprocess.run(f"chmod 755 {(altlinuxpath)}/anisette-server", shell=True)
|
||||
self.loadaltlinux.set_fraction(0.2)
|
||||
self.lbl1.set_text("Downloading Apple Music APK...")
|
||||
r = requests.get(
|
||||
@@ -330,8 +302,8 @@ class SplashScreen(Handy.Window):
|
||||
)
|
||||
silentremove(f"{(altlinuxpath)}/am.apk")
|
||||
self.loadaltlinux.set_fraction(0.4)
|
||||
self.lbl1.set_text("Starting anisette_server...")
|
||||
subprocess.run(f"cd {(altlinuxpath)} && ./anisette_server &", shell=True)
|
||||
self.lbl1.set_text("Starting anisette-server...")
|
||||
subprocess.run(f"cd {(altlinuxpath)} && ./anisette-server &", shell=True)#-n 127.0.0.1 -p 6969 &", shell=True)
|
||||
self.loadaltlinux.set_fraction(0.5)
|
||||
finished = False
|
||||
while not finished:
|
||||
@@ -350,22 +322,22 @@ class SplashScreen(Handy.Window):
|
||||
open(f"{(altlinuxpath)}/AltServer", "wb").write(r.content)
|
||||
subprocess.run(f"chmod +x {(altlinuxpath)}/AltServer", shell=True)
|
||||
subprocess.run(f"chmod 755 {(altlinuxpath)}/AltServer", shell=True)
|
||||
self.loadaltlinux.set_fraction(0.8)
|
||||
if not os.path.isfile(f"{(altlinuxpath)}/AltStore.ipa"):
|
||||
self.lbl1.set_text("Downloading AltStore...")
|
||||
self.loadaltlinux.set_fraction(0.7)
|
||||
r = requests.get(
|
||||
"https://cdn.altstore.io/file/altstore/altstore.ipa",
|
||||
allow_redirects=True,
|
||||
)
|
||||
open(f"{(altlinuxpath)}/AltStore.ipa", "wb").write(r.content)
|
||||
subprocess.run(f"chmod 755 {(altlinuxpath)}/AltStore.ipa", shell=True)
|
||||
altstoredownload("Download")
|
||||
else:
|
||||
self.lbl1.set_text("Checking latest AltStore version...")
|
||||
if not altstoredownload("Check"):
|
||||
self.lbl1.set_text("Downloading new version of AltStore...")
|
||||
altstoredownload("Download")
|
||||
self.lbl1.set_text("Starting AltServer...")
|
||||
self.loadaltlinux.set_fraction(1.0)
|
||||
subprocess.run(f"{(altlinuxpath)}/AltServer &", shell=True)
|
||||
return 0
|
||||
|
||||
|
||||
class login(Gtk.Window):
|
||||
class login(Gtk.Window):#
|
||||
def __init__(self):
|
||||
super().__init__(title="Login")
|
||||
self.present()
|
||||
@@ -399,12 +371,15 @@ class login(Gtk.Window):
|
||||
grid.attach(self.entry, 1, 2, 1, 1)
|
||||
grid.attach_next_to(self.button, self.entry, Gtk.PositionType.RIGHT, 1, 1)
|
||||
|
||||
silentremove(f"{(altlinuxpath)}/log.txt")
|
||||
|
||||
def on_click_me_clicked1(self):
|
||||
self.realthread1 = threading.Thread(target=self.onclickmethread)
|
||||
self.realthread1.start()
|
||||
GLib.idle_add(self.ermlol)
|
||||
|
||||
def on_click_me_clicked(self, button):
|
||||
silentremove(f"{(altlinuxpath)}/log.txt")
|
||||
if not os.path.isfile(f"{(altlinuxpath)}/saved.txt"):
|
||||
self.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
|
||||
dialog = Gtk.MessageDialog(
|
||||
@@ -436,21 +411,7 @@ class login(Gtk.Window):
|
||||
GLib.idle_add(self.ermlol)
|
||||
|
||||
def onclickmethread(self):
|
||||
silentremove(f"{(altlinuxpath)}/ideviceinfo.txt")
|
||||
subprocess.run(f"ideviceinfo > {(altlinuxpath)}/ideviceinfo.txt", shell=True)
|
||||
result = "result"
|
||||
pathsy = f"{(altlinuxpath)}/ideviceinfo.txt"
|
||||
with open(pathsy) as file:
|
||||
# Iterate through lines
|
||||
for line in file.readlines():
|
||||
# Find the start of the word
|
||||
index = line.find("ProductVersion: ")
|
||||
# If the word is inside the line
|
||||
if index != -1:
|
||||
result = line[:-1][16:]
|
||||
silentremove(f"{(altlinuxpath)}/ideviceinfo.txt")
|
||||
print(result)
|
||||
if result >= "12.2":
|
||||
if checkiosver() >= "15.0":
|
||||
global savedcheck
|
||||
global AppleID
|
||||
global Password
|
||||
@@ -461,20 +422,20 @@ class login(Gtk.Window):
|
||||
global InsAltStore
|
||||
print(PATH)
|
||||
silentremove(f"{(altlinuxpath)}/log.txt")
|
||||
f = open(f"{(altlinuxpath)}/log.txt", "w")
|
||||
f.close()
|
||||
#f = open(f"{(altlinuxpath)}/log.txt", "w")
|
||||
#f.close()
|
||||
if os.path.isdir(f'{ os.environ["HOME"] }/.adi'):
|
||||
rmtree(f'{ os.environ["HOME"] }/.adi')
|
||||
InsAltStoreCMD = f"""export ALTSERVER_ANISETTE_SERVER='http://127.0.0.1:6969' & {(AltServer)} -u {UDID} -a {AppleID} -p {Password} {PATH} > {("$HOME/.local/share/altlinux/log.txt")}"""
|
||||
InsAltStoreCMD = f"""export ALTSERVER_ANISETTE_SERVER='http://127.0.0.1:6969' ; {(AltServer)} -u {UDID} -a {AppleID} -p {Password} {PATH} > {("$HOME/.local/share/altlinux/log.txt")}"""
|
||||
InsAltStore = subprocess.Popen(
|
||||
InsAltStoreCMD,
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
shell=True,
|
||||
)
|
||||
else: # If the iOS version is lower than 12.2, AltServer-Linux won't run
|
||||
else: # If the iOS version is lower than 15.0, AltServer-Linux won't run
|
||||
global Failmsg
|
||||
Failmsg = "iOS 12.2 or later is required."
|
||||
Failmsg = "iOS 15.0 or later is required."
|
||||
dialog2 = DialogExample3(self)
|
||||
dialog2.run()
|
||||
dialog2.destroy()
|
||||
@@ -593,16 +554,17 @@ class login(Gtk.Window):
|
||||
|
||||
def on_icon_toggled(self, widget, icon, event):
|
||||
global icon_name
|
||||
if icon_name == "view-conceal-symbolic.symbolic":
|
||||
icon_name = "view-reveal-symbolic.symbolic"
|
||||
if icon_name == "changes-prevent-symbolic":
|
||||
icon_name = "changes-allow-symbolic"
|
||||
self.entry.set_visibility(True)
|
||||
elif icon_name == "view-reveal-symbolic.symbolic":
|
||||
icon_name = "view-conceal-symbolic.symbolic"
|
||||
elif icon_name == "changes-allow-symbolic":
|
||||
icon_name = "changes-prevent-symbolic"
|
||||
self.entry.set_visibility(False)
|
||||
self.entry.set_icon_from_icon_name(Gtk.EntryIconPosition.SECONDARY, icon_name)
|
||||
|
||||
def on_editable_toggled(self, widget):
|
||||
print("lol")
|
||||
#
|
||||
#def on_editable_toggled(self, widget):
|
||||
# print("lol")
|
||||
|
||||
|
||||
class PairWindow(Handy.Window):
|
||||
@@ -939,21 +901,10 @@ def notify():
|
||||
)
|
||||
if LatestVersion > LocalVersion:
|
||||
Notify.init("MyProgram")
|
||||
command2 = 'echo $XDG_CURRENT_DESKTOP | grep -q "GNOME"'
|
||||
command3 = 'echo $XDG_CURRENT_DESKTOP | grep -q "X-Cinnamon"'
|
||||
CheckRun9 = subprocess.run(command2, shell=True)
|
||||
if CheckRun9.returncode == 0:
|
||||
file_name1 = resource_path("resources/1.png")
|
||||
else:
|
||||
CheckRun10 = subprocess.run(command3, shell=True)
|
||||
if CheckRun10.returncode == 0:
|
||||
file_name1 = resource_path("resources/1.png")
|
||||
else:
|
||||
file_name1 = resource_path("resources/2.png")
|
||||
n = Notify.Notification.new(
|
||||
"An update is available!",
|
||||
"Click 'Download Update' in the tray menu.",
|
||||
os.path.abspath(file_name1),
|
||||
resource_path("resources/3.png"),
|
||||
)
|
||||
n.set_timeout(Notify.EXPIRES_DEFAULT)
|
||||
# n.add_action("newupd", "Download", actionCallback)
|
||||
@@ -967,7 +918,7 @@ def notify():
|
||||
|
||||
def showurl(_):
|
||||
Gtk.show_uri_on_window(
|
||||
None, "https://github.com/maxasix/AltLinux/releases", Gdk.CURRENT_TIME
|
||||
None, "https://github.com/i-love-altlinux/AltLinux/releases", Gdk.CURRENT_TIME
|
||||
)
|
||||
quitit()
|
||||
|
||||
@@ -989,12 +940,13 @@ def restartaltserver(_):
|
||||
subprocess.run(f"killall {AnisetteServer}", shell=True)
|
||||
subprocess.run("idevicepair pair", shell=True)
|
||||
subprocess.run(
|
||||
f"""export ALTSERVER_ANISETTE_SERVER='http://127.0.0.1:6969' & {(altlinuxpath)}/AltServer &""",
|
||||
f"""export ALTSERVER_ANISETTE_SERVER='http://127.0.0.1:6969' ; {(altlinuxpath)}/AltServer &""",
|
||||
shell=True,
|
||||
)
|
||||
|
||||
|
||||
def winerm():
|
||||
silentremove(f"{(altlinuxpath)}/log.txt")
|
||||
dialog = Gtk.MessageDialog(
|
||||
# transient_for=self,
|
||||
flags=0,
|
||||
@@ -1061,6 +1013,51 @@ def silentremove(filename):
|
||||
if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory
|
||||
raise # re-raise exception if a different error occurred
|
||||
|
||||
def altstoredownload(value):
|
||||
# setting the base URL value
|
||||
baseUrl = "https://cdn.altstore.io/file/altstore/apps.json"
|
||||
|
||||
# retrieving data from JSON Data
|
||||
json_data = requests.get(baseUrl)
|
||||
if json_data.status_code == 200:
|
||||
data = json_data.json()
|
||||
for app in data['apps']:
|
||||
if app['name'] == "AltStore":
|
||||
if value == "Check":
|
||||
size = app['versions'][0]['size']
|
||||
return size == os.path.getsize(f'{(altlinuxpath)}/AltStore.ipa')
|
||||
break
|
||||
if value == "Download":
|
||||
latest = app['versions'][0]['downloadURL']
|
||||
r = requests.get(
|
||||
latest,
|
||||
allow_redirects=True,
|
||||
)
|
||||
latest_filename = latest.split('/')[-1]
|
||||
open(f"{(altlinuxpath)}/{(latest_filename)}", "wb").write(r.content)
|
||||
os.rename(f"{(altlinuxpath)}/{(latest_filename)}", f"{(altlinuxpath)}/AltStore.ipa")
|
||||
subprocess.run(f"chmod 755 {(altlinuxpath)}/AltStore.ipa", shell=True)
|
||||
break
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def checkiosver():
|
||||
silentremove(f"{(altlinuxpath)}/ideviceinfo.txt")
|
||||
subprocess.run(f"ideviceinfo > {(altlinuxpath)}/ideviceinfo.txt", shell=True)
|
||||
result = "result"
|
||||
pathsy = f"{(altlinuxpath)}/ideviceinfo.txt"
|
||||
with open(pathsy) as file:
|
||||
# Iterate through lines
|
||||
for line in file.readlines():
|
||||
# Find the start of the word
|
||||
index = line.find("ProductVersion: ")
|
||||
# If the word is inside the line
|
||||
if index != -1:
|
||||
result = line[:-1][16:]
|
||||
silentremove(f"{(altlinuxpath)}/ideviceinfo.txt")
|
||||
print(result)
|
||||
return(result)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user