first commit of shared_libs coarse build
This commit is contained in:
143
gitea.py
Normal file
143
gitea.py
Normal file
@ -0,0 +1,143 @@
|
||||
#!/usr/bin/python3
|
||||
import gettext
|
||||
import locale
|
||||
import requests
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import shutil
|
||||
from shared_libs.common_tools import LxTools
|
||||
|
||||
|
||||
class GiteaUpdate:
|
||||
"""
|
||||
Calling download requests the download URL of the running script,
|
||||
the taskbar image for the “Download OK” window, the taskbar image for the
|
||||
“Download error” window, and the variable res
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def api_down(update_api_url: str, version: str, update_setting: str = None) -> str:
|
||||
"""
|
||||
Checks for updates via API
|
||||
|
||||
Args:
|
||||
update_api_url: Update API URL
|
||||
version: Current version
|
||||
update_setting: Update setting from ConfigManager (on/off)
|
||||
|
||||
Returns:
|
||||
New version or status message
|
||||
"""
|
||||
# If updates are disabled, return immediately
|
||||
if update_setting != "on":
|
||||
return "False"
|
||||
|
||||
try:
|
||||
response: requests.Response = requests.get(update_api_url, timeout=10)
|
||||
response.raise_for_status() # Raise exception for HTTP errors
|
||||
|
||||
response_data = response.json()
|
||||
if not response_data:
|
||||
return "No Updates"
|
||||
|
||||
latest_version = response_data[0].get("tag_name")
|
||||
if not latest_version:
|
||||
return "Invalid API Response"
|
||||
|
||||
# Compare versions (strip 'v. ' prefix if present)
|
||||
current_version = version[3:] if version.startswith("v. ") else version
|
||||
|
||||
if current_version != latest_version:
|
||||
return latest_version
|
||||
else:
|
||||
return "No Updates"
|
||||
|
||||
except requests.exceptions.RequestException:
|
||||
return "No Internet Connection!"
|
||||
except (ValueError, KeyError, IndexError):
|
||||
return "Invalid API Response"
|
||||
|
||||
@staticmethod
|
||||
def download(urld: str, res: str) -> None:
|
||||
"""
|
||||
Downloads new version of application
|
||||
|
||||
:param urld: Download URL
|
||||
:param res: Result filename
|
||||
"""
|
||||
|
||||
try:
|
||||
to_down: str = f"wget -qP {Path.home()} {" "} {urld}"
|
||||
result: int = subprocess.call(to_down, shell=True)
|
||||
if result == 0:
|
||||
shutil.chown(f"{Path.home()}/{res}.zip", 1000, 1000)
|
||||
|
||||
LxTools.msg_window(
|
||||
AppConfig.IMAGE_PATHS["icon_info"],
|
||||
AppConfig.IMAGE_PATHS["icon_download"],
|
||||
Msg.STR["title"],
|
||||
Msg.STR["ok_message"],
|
||||
)
|
||||
|
||||
else:
|
||||
|
||||
LxTools.msg_window(
|
||||
AppConfig.IMAGE_PATHS["icon_error"],
|
||||
AppConfig.IMAGE_PATHS["icon_download_error"],
|
||||
Msg.STR["error_title"],
|
||||
Msg.STR["error_massage"],
|
||||
)
|
||||
|
||||
except subprocess.CalledProcessError:
|
||||
|
||||
LxTools.msg_window(
|
||||
AppConfig.IMAGE_PATHS["icon_error"],
|
||||
AppConfig.IMAGE_PATHS["icon_msg"],
|
||||
Msg.STR["error_title"],
|
||||
Msg.STR["error_no_internet"],
|
||||
)
|
||||
|
||||
|
||||
class AppConfig:
|
||||
|
||||
# Localization
|
||||
APP_NAME: str = "gitea"
|
||||
LOCALE_DIR: Path = Path("/usr/share/locale/")
|
||||
|
||||
@staticmethod
|
||||
def setup_translations() -> gettext.gettext:
|
||||
"""
|
||||
Initialize translations and set the translation function
|
||||
Special method for translating strings in this file
|
||||
|
||||
Returns:
|
||||
The gettext translation function
|
||||
"""
|
||||
locale.bindtextdomain(AppConfig.APP_NAME, AppConfig.LOCALE_DIR)
|
||||
gettext.bindtextdomain(AppConfig.APP_NAME, AppConfig.LOCALE_DIR)
|
||||
gettext.textdomain(AppConfig.APP_NAME)
|
||||
return gettext.gettext
|
||||
|
||||
# Images and icons paths
|
||||
IMAGE_PATHS: dict[str, Path] = {
|
||||
"icon_info": "/usr/share/icons/lx-icons/64/info.png",
|
||||
"icon_error": "/usr/share/icons/lx-icons/64/error.png",
|
||||
"icon_download": "/usr/share/icons/lx-icons/48/download.png",
|
||||
"icon_download_error": "/usr/share/icons/lx-icons/48/download_error.png",
|
||||
}
|
||||
|
||||
|
||||
# here is initializing the class for translation strings
|
||||
_ = AppConfig.setup_translations()
|
||||
|
||||
|
||||
class Msg:
|
||||
|
||||
STR: dict[str, str] = {
|
||||
# Strings for messages
|
||||
"title": _("Download Successful"),
|
||||
"ok_message": _("Your zip file is in home directory"),
|
||||
"error_title": _("Download error"),
|
||||
"error_message": _("Download failed! Please try again"),
|
||||
"error_no_internet": _("Download failed! No internet connection!"),
|
||||
}
|
Reference in New Issue
Block a user