Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
9825c09de0 | |||
70d973e9d7 | |||
54b62fd5d5 | |||
e1950cf8bf | |||
794dda346a |
10
Changelog
@ -9,6 +9,16 @@ My standard System: Linux Mint 22 Cinnamon
|
|||||||
- Tunnel in tk.canvas for modern look
|
- Tunnel in tk.canvas for modern look
|
||||||
- Replace Download Button with Lx Tools installer
|
- Replace Download Button with Lx Tools installer
|
||||||
|
|
||||||
|
### Added
|
||||||
|
23-06-2025
|
||||||
|
|
||||||
|
- all msg_window with MassageDialog replaced
|
||||||
|
|
||||||
|
### Added
|
||||||
|
14-06-2025
|
||||||
|
|
||||||
|
- replace msg_window with MassageDialog
|
||||||
|
- vpn stop icon corrected
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
07-06-2025
|
07-06-2025
|
||||||
|
BIN
lx-icons/128/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 5.5 KiB |
BIN
lx-icons/128/question_mark.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
lx-icons/128/warning.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 10 KiB |
BIN
lx-icons/256/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 9.8 KiB |
BIN
lx-icons/256/question_mark.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
lx-icons/256/warning.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 20 KiB |
BIN
lx-icons/32/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
lx-icons/32/question_mark.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
lx-icons/32/warning.png
Normal file
After Width: | Height: | Size: 838 B |
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
lx-icons/32/wg_vpn.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
lx-icons/48/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
lx-icons/48/question_mark.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
lx-icons/48/warning.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 3.1 KiB |
BIN
lx-icons/64/Lunix_Tools.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.5 KiB |
BIN
lx-icons/64/question_mark.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
lx-icons/64/warning.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 4.5 KiB |
@ -6,25 +6,23 @@ import pwd
|
|||||||
import shutil
|
import shutil
|
||||||
from subprocess import CompletedProcess, run
|
from subprocess import CompletedProcess, run
|
||||||
from shared_libs.wp_app_config import AppConfig
|
from shared_libs.wp_app_config import AppConfig
|
||||||
from shared_libs.common_tools import LxTools
|
from shared_libs.message import MessageDialog
|
||||||
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("--user", required=True, help="Username of the target file system")
|
parser.add_argument("--user", required=True, help="Username of the target file system")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
_ = AppConfig.setup_translations()
|
||||||
try:
|
try:
|
||||||
# Retrieve UID and GID
|
# Retrieve UID and GID
|
||||||
user_info = pwd.getpwnam(args.user)
|
user_info = pwd.getpwnam(args.user)
|
||||||
uid = user_info.pw_uid # User ID (e.g., 1000)
|
uid = user_info.pw_uid # User ID (e.g., 1000)
|
||||||
gid = user_info.pw_gid # Group ID (e.g., 1000)
|
gid = user_info.pw_gid # Group ID (e.g., 1000)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
"error", _(f"User '{args.user}' not found."), title="Error decrypt"
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
).show()
|
||||||
"Error decrypt",
|
|
||||||
f"User '{args.user}' not found.",
|
|
||||||
exc_info=True,
|
|
||||||
)
|
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
crypted_tunnel: Path = Path(f"/home/{args.user}/.config/wire_py")
|
crypted_tunnel: Path = Path(f"/home/{args.user}/.config/wire_py")
|
||||||
@ -32,9 +30,9 @@ crypted_tunnel: Path = Path(f"/home/{args.user}/.config/wire_py")
|
|||||||
if len([str(file) for file in crypted_tunnel.glob("*.dat")]) == 0:
|
if len([str(file) for file in crypted_tunnel.glob("*.dat")]) == 0:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
crypted__tunnel = [str(file) for file in crypted_tunnel.glob("*.dat")]
|
crypted_tunnel = [str(file) for file in crypted_tunnel.glob("*.dat")]
|
||||||
|
|
||||||
for tunnel_path in crypted__tunnel:
|
for tunnel_path in crypted_tunnel:
|
||||||
|
|
||||||
base_name = Path(tunnel_path).stem
|
base_name = Path(tunnel_path).stem
|
||||||
|
|
||||||
@ -52,15 +50,16 @@ else:
|
|||||||
],
|
],
|
||||||
capture_output=True,
|
capture_output=True,
|
||||||
text=True,
|
text=True,
|
||||||
check=False,
|
check=True,
|
||||||
)
|
)
|
||||||
shutil.chown(f"{AppConfig.TEMP_DIR}/{base_name}.conf", uid, gid)
|
shutil.chown(f"{AppConfig.TEMP_DIR}/{base_name}.conf", uid, gid)
|
||||||
|
|
||||||
# Output from Openssl Error
|
# Output from Openssl Error
|
||||||
if process.stderr:
|
if process.stderr:
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
"error",
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
_(
|
||||||
"Error decrypt",
|
f"{process.stderr} Error by [{tunnel_path}] Code: {process.returncode}"
|
||||||
f"{process.stderr} Error by [{tunnel_path}] Code: {process.returncode}",
|
),
|
||||||
)
|
title="Error decrypt",
|
||||||
|
).show()
|
||||||
|
32
tunnel.py
@ -9,6 +9,7 @@ from subprocess import run, CompletedProcess
|
|||||||
import secrets
|
import secrets
|
||||||
from shared_libs.wp_app_config import AppConfig, Msg
|
from shared_libs.wp_app_config import AppConfig, Msg
|
||||||
from shared_libs.common_tools import LxTools, CryptoUtil
|
from shared_libs.common_tools import LxTools, CryptoUtil
|
||||||
|
from shared_libs.message import MessageDialog
|
||||||
|
|
||||||
# Translate
|
# Translate
|
||||||
_ = AppConfig.setup_translations()
|
_ = AppConfig.setup_translations()
|
||||||
@ -172,12 +173,8 @@ class Tunnel:
|
|||||||
CryptoUtil.decrypt(getpass.getuser())
|
CryptoUtil.decrypt(getpass.getuser())
|
||||||
if len([file.name for file in AppConfig.TEMP_DIR.glob("*.conf")]) == 0:
|
if len([file.name for file in AppConfig.TEMP_DIR.glob("*.conf")]) == 0:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["sel_tl"],
|
|
||||||
Msg.STR["tl_first"],
|
|
||||||
)
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
wg_tar: str = f"{AppConfig.BASE_DIR}/{now_datetime}"
|
wg_tar: str = f"{AppConfig.BASE_DIR}/{now_datetime}"
|
||||||
@ -186,22 +183,20 @@ class Tunnel:
|
|||||||
with zipfile.ZipFile(f"{wg_tar}.zip", "r") as zf:
|
with zipfile.ZipFile(f"{wg_tar}.zip", "r") as zf:
|
||||||
if zf.namelist():
|
if zf.namelist():
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
"info",
|
||||||
AppConfig.IMAGE_PATHS["icon_vpn"],
|
|
||||||
Msg.STR["exp_succ"],
|
|
||||||
Msg.STR["exp_in_home"],
|
Msg.STR["exp_in_home"],
|
||||||
|
title=Msg.STR["exp_succ"],
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
logging.error(
|
logging.error(
|
||||||
"There was a mistake at creating the Zip file. File is empty."
|
"There was a mistake at creating the Zip file. File is empty."
|
||||||
)
|
)
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
"error", Msg.STR["exp_zip"], title=Msg.STR["exp_err"]
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["exp_err"],
|
|
||||||
Msg.STR["exp_zip"],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
except PermissionError:
|
except PermissionError:
|
||||||
@ -217,12 +212,7 @@ class Tunnel:
|
|||||||
pass
|
pass
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Export failed: {str(e)}")
|
logging.error(f"Export failed: {str(e)}")
|
||||||
LxTools.msg_window(
|
MessageDialog("error", Msg.STR["exp_try"], title=Msg.STR["exp_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["exp_err"],
|
|
||||||
Msg.STR["exp_try"],
|
|
||||||
)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
|
107
wirepy.py
@ -8,11 +8,12 @@ import shutil
|
|||||||
import sys
|
import sys
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
import webbrowser
|
import webbrowser
|
||||||
|
from functools import partial
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from subprocess import CompletedProcess, run
|
from subprocess import CompletedProcess, run
|
||||||
from tkinter import TclError, filedialog, ttk
|
from tkinter import TclError, filedialog, ttk
|
||||||
from tunnel import Tunnel
|
from tunnel import Tunnel
|
||||||
|
from shared_libs.message import MessageDialog
|
||||||
from shared_libs.gitea import GiteaUpdate
|
from shared_libs.gitea import GiteaUpdate
|
||||||
from shared_libs.common_tools import (
|
from shared_libs.common_tools import (
|
||||||
LxTools,
|
LxTools,
|
||||||
@ -462,10 +463,6 @@ class FrameWidgets(ttk.Frame):
|
|||||||
"""
|
"""
|
||||||
a tk.Toplevel window
|
a tk.Toplevel window
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def link_btn() -> None:
|
|
||||||
webbrowser.open("https://git.ilunix.de/punix/Wire-Py")
|
|
||||||
|
|
||||||
msg_t = _(
|
msg_t = _(
|
||||||
"Wire-Py a simple Wireguard Gui for Linux systems.\n\n"
|
"Wire-Py a simple Wireguard Gui for Linux systems.\n\n"
|
||||||
"Wire-Py is open source software written in Python.\n\n"
|
"Wire-Py is open source software written in Python.\n\n"
|
||||||
@ -473,13 +470,17 @@ class FrameWidgets(ttk.Frame):
|
|||||||
"Use without warranty!\n"
|
"Use without warranty!\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_vpn"],
|
"info",
|
||||||
AppConfig.IMAGE_PATHS["icon_vpn"],
|
|
||||||
_("Info"),
|
|
||||||
msg_t,
|
msg_t,
|
||||||
_("Go to Wire-Py git"),
|
buttons=["OK", _("Go to Wire-Py git")],
|
||||||
link_btn,
|
title=_("Info"),
|
||||||
|
commands=[
|
||||||
|
None,
|
||||||
|
partial(webbrowser.open, "https://git.ilunix.de/punix/Wire-Py"),
|
||||||
|
],
|
||||||
|
icon=AppConfig.IMAGE_PATHS["icon_vpn"],
|
||||||
|
wraplength=420,
|
||||||
)
|
)
|
||||||
|
|
||||||
def update_setting(self, update_res) -> None:
|
def update_setting(self, update_res) -> None:
|
||||||
@ -635,21 +636,15 @@ class FrameWidgets(ttk.Frame):
|
|||||||
data_import, key_name = Tunnel.parse_files_to_dictionary(filepath=filepath)
|
data_import, key_name = Tunnel.parse_files_to_dictionary(filepath=filepath)
|
||||||
|
|
||||||
if CryptoUtil.find_key(f"{data_import[key_name]["PrivateKey"]}="):
|
if CryptoUtil.find_key(f"{data_import[key_name]["PrivateKey"]}="):
|
||||||
LxTools.msg_window(
|
MessageDialog("error", Msg.STR["tl_exist"], title=Msg.STR["imp_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["imp_err"],
|
|
||||||
Msg.STR["tl_exist"],
|
|
||||||
)
|
|
||||||
|
|
||||||
elif not CryptoUtil.is_valid_base64(
|
elif not CryptoUtil.is_valid_base64(
|
||||||
f"{data_import[key_name]["PrivateKey"]}="
|
f"{data_import[key_name]["PrivateKey"]}="
|
||||||
): # 2. Second check: Is it valid Base64?
|
): # 2. Second check: Is it valid Base64?
|
||||||
LxTools.msg_window(
|
MessageDialog(
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
"error",
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["imp_err"],
|
|
||||||
Msg.STR["invalid_base64"],
|
Msg.STR["invalid_base64"],
|
||||||
|
title=Msg.STR["imp_err"],
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
filepath = Path(filepath)
|
filepath = Path(filepath)
|
||||||
@ -742,12 +737,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
print(f">> {import_file.stem} << autostart is disabled by default")
|
print(f">> {import_file.stem} << autostart is disabled by default")
|
||||||
|
|
||||||
except UnboundLocalError:
|
except UnboundLocalError:
|
||||||
LxTools.msg_window(
|
MessageDialog("error", Msg.STR["no_valid_file"], title=Msg.STR["imp_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_error"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["imp_err"],
|
|
||||||
Msg.STR["no_valid_file"],
|
|
||||||
)
|
|
||||||
except (IsADirectoryError, TypeError, FileNotFoundError):
|
except (IsADirectoryError, TypeError, FileNotFoundError):
|
||||||
print("File import: abort by user...")
|
print("File import: abort by user...")
|
||||||
except EOFError as e:
|
except EOFError as e:
|
||||||
@ -810,21 +800,11 @@ class FrameWidgets(ttk.Frame):
|
|||||||
|
|
||||||
if self.l_box.size() != 0:
|
if self.l_box.size() != 0:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["sel_list"], title=Msg.STR["sel_tl"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["sel_tl"],
|
|
||||||
Msg.STR["sel_list"],
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["sel_tl"],
|
|
||||||
Msg.STR["tl_first"],
|
|
||||||
)
|
|
||||||
|
|
||||||
def enable_check_box(self, _) -> None:
|
def enable_check_box(self, _) -> None:
|
||||||
"""
|
"""
|
||||||
@ -907,41 +887,21 @@ class FrameWidgets(ttk.Frame):
|
|||||||
|
|
||||||
if len(self.lb_rename.get()) > 12:
|
if len(self.lb_rename.get()) > 12:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["sign_len"], title=Msg.STR["ren_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["ren_err"],
|
|
||||||
Msg.STR["sign_len"],
|
|
||||||
)
|
|
||||||
|
|
||||||
elif len(self.lb_rename.get()) == 0:
|
elif len(self.lb_rename.get()) == 0:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["zero_signs"], title=Msg.STR["ren_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["ren_err"],
|
|
||||||
Msg.STR["zero_signs"],
|
|
||||||
)
|
|
||||||
|
|
||||||
elif any(ch in special_characters for ch in self.lb_rename.get()):
|
elif any(ch in special_characters for ch in self.lb_rename.get()):
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["false_signs"], title=Msg.STR["ren_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["ren_err"],
|
|
||||||
Msg.STR["false_signs"],
|
|
||||||
)
|
|
||||||
|
|
||||||
elif self.lb_rename.get() in [
|
elif self.lb_rename.get() in [
|
||||||
file.stem for file in AppConfig.CONFIG_DIR.glob("*.dat")
|
file.stem for file in AppConfig.CONFIG_DIR.glob("*.dat")
|
||||||
]:
|
]:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["is_in_use"], title=Msg.STR["ren_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["ren_err"],
|
|
||||||
Msg.STR["is_in_use"],
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
@ -983,12 +943,7 @@ class FrameWidgets(ttk.Frame):
|
|||||||
|
|
||||||
except IndexError:
|
except IndexError:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["sel_list"], title=Msg.STR["ren_err"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["ren_err"],
|
|
||||||
Msg.STR["sel_list"],
|
|
||||||
)
|
|
||||||
|
|
||||||
except EOFError as e:
|
except EOFError as e:
|
||||||
logging.error(e, exc_info=True)
|
logging.error(e, exc_info=True)
|
||||||
@ -1061,21 +1016,11 @@ class FrameWidgets(ttk.Frame):
|
|||||||
|
|
||||||
if self.l_box.size() != 0:
|
if self.l_box.size() != 0:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["sel_list"], title=Msg.STR["sel_tl"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["sel_tl"],
|
|
||||||
Msg.STR["sel_list"],
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
||||||
LxTools.msg_window(
|
MessageDialog("info", Msg.STR["tl_first"], title=Msg.STR["sel_tl"])
|
||||||
AppConfig.IMAGE_PATHS["icon_info"],
|
|
||||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
|
||||||
Msg.STR["sel_tl"],
|
|
||||||
Msg.STR["tl_first"],
|
|
||||||
)
|
|
||||||
|
|
||||||
def handle_connection_state(self, action: str, tunnel_name: str = None) -> None:
|
def handle_connection_state(self, action: str, tunnel_name: str = None) -> None:
|
||||||
"""
|
"""
|
||||||
|
@ -57,7 +57,7 @@ class AppConfig:
|
|||||||
|
|
||||||
# Updates
|
# Updates
|
||||||
# 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year
|
# 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year
|
||||||
VERSION: str = "v. 2.06.0725"
|
VERSION: str = "v. 2.06.2425"
|
||||||
UPDATE_URL: str = "https://git.ilunix.de/api/v1/repos/punix/Wire-Py/releases"
|
UPDATE_URL: str = "https://git.ilunix.de/api/v1/repos/punix/Wire-Py/releases"
|
||||||
DOWNLOAD_URL: str = "https://git.ilunix.de/punix/Wire-Py/archive"
|
DOWNLOAD_URL: str = "https://git.ilunix.de/punix/Wire-Py/archive"
|
||||||
|
|
||||||
|