forked from Shinonome/althea
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 54be737871 | |||
| 7b7be95b9f | |||
| 18f096f0a3 | |||
| d86638c910 | |||
| 3dd181272d | |||
| 69772cd23e | |||
| 5fa061757e | |||
| e632dc1507 | |||
| 9618310e9e | |||
| 9fe1e96df2 | |||
| 2699fcaebd |
@@ -1,9 +1,9 @@
|
||||
Package: AltLinux
|
||||
Name: AltLinux
|
||||
Version: 0.4.2-2
|
||||
Architecture: all
|
||||
Author: maxasix <maxasix@disroot.org>
|
||||
Maintainer: maxasix <maxasix@disroot.org>
|
||||
Version: 0.5.0
|
||||
Architecture: amd64
|
||||
Author: vyvir <the.uniformed630@aleeas.com>
|
||||
Maintainer: vyvir <the.uniformed630@aleeas.com>
|
||||
Description: GUI for AltServerLinux
|
||||
Homepage: https://github.com/maxasix/AltLinux
|
||||
Depends: binutils, python3 (>= 3.8), gir1.2-appindicator3-0.1, usbmuxd, libimobiledevice6, libimobiledevice-utils, libavahi-compat-libdnssd-dev, unzip, usbutils, libhandy-1-0, libhandy-1-dev, curl
|
||||
Homepage: https://github.com/i-love-altlinux/AltLinux
|
||||
Depends: binutils, python3 (>= 3.8), gir1.2-appindicator3-0.1, usbmuxd, libimobiledevice6, libimobiledevice-utils, libavahi-compat-libdnssd-dev, unzip, usbutils, libhandy-1-0, libhandy-1-dev, curl, python3-requests, gir1.2-notify-0.7, psmisc
|
||||
|
||||
@@ -1,92 +1,50 @@
|
||||
# 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/vtvxYFAfAR).
|
||||
## Instructions
|
||||
|
||||
## Install AltLinux
|
||||
### 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
|
||||
```
|
||||
@@ -99,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:
|
||||
@@ -160,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:
|
||||
@@ -182,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",
|
||||
@@ -211,9 +184,9 @@ def on_abtdlg(self):
|
||||
) # , 'Provision made by', 'Dadoum'])
|
||||
about.set_artists(["nebula"])
|
||||
about.set_comments("A GUI for AltServer-Linux written in Python.")
|
||||
about.set_website("https://github.com/i-love-altlinux/AltLinux")
|
||||
about.set_website("https://github.com/vyvir/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/1.1.0/anisette_server-x86_64",
|
||||
"https://github.com/vyvir/AltLinux/releases/download/v0.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-beta.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):
|
||||
@@ -931,7 +893,7 @@ def notify():
|
||||
if (connectioncheck()) == True:
|
||||
LatestVersion = (
|
||||
urllib.request.urlopen(
|
||||
"https://raw.githubusercontent.com/i-love-altlinux/AltLinux/main/resources/version"
|
||||
"https://raw.githubusercontent.com/vyvir/AltLinux/main/resources/version"
|
||||
)
|
||||
.readline()
|
||||
.rstrip()
|
||||
@@ -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/vyvir/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,
|
||||
@@ -1038,7 +990,7 @@ def win2(_):
|
||||
|
||||
def actionCallback(notification, action, user_data=None):
|
||||
Gtk.show_uri_on_window(
|
||||
None, "https://github.com/i-love-altlinux/AltLinux/releases", Gdk.CURRENT_TIME
|
||||
None, "https://github.com/vyvir/AltLinux/releases", Gdk.CURRENT_TIME
|
||||
)
|
||||
quitit()
|
||||
|
||||
@@ -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()
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
0.4.2-1
|
||||
0.5.0
|
||||
x64
|
||||
|
||||
Reference in New Issue
Block a user