mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
151 lines
4.8 KiB
Python
151 lines
4.8 KiB
Python
import json
|
|
import plistlib
|
|
import re
|
|
import requests
|
|
import os
|
|
from datetime import datetime
|
|
|
|
def prepare_description(text):
|
|
text = re.sub('<[^<]+?>', '', text) # Remove HTML tags
|
|
text = re.sub(r'#{1,6}\s?', '', text) # Remove markdown header tags
|
|
text = re.sub(r'\*{2}', '', text) # Remove all occurrences of two consecutive asterisks
|
|
text = re.sub(r'(?<=\r|\n)-', '•', text) # Only replace - with • if it is preceded by \r or \n
|
|
text = re.sub(r'`', '"', text) # Replace ` with "
|
|
text = re.sub(r'\r\n\r\n', '\r \n', text) # Replace \r\n\r\n with \r \n (avoid incorrect display of the description regarding paragraphs)
|
|
return text
|
|
|
|
def fetch_latest_release(repo_url):
|
|
api_url = f"https://api.github.com/repos/{repo_url}/releases"
|
|
headers = {
|
|
"Accept": "application/vnd.github+json",
|
|
}
|
|
try:
|
|
response = requests.get(api_url, headers=headers)
|
|
response.raise_for_status()
|
|
release = response.json()
|
|
return release
|
|
except requests.RequestException as e:
|
|
print(f"Error fetching releases: {e}")
|
|
raise
|
|
|
|
def get_file_size(url):
|
|
try:
|
|
response = requests.head(url)
|
|
response.raise_for_status()
|
|
return int(response.headers.get('Content-Length', 0))
|
|
except requests.RequestException as e:
|
|
print(f"Error getting file size: {e}")
|
|
return 194586
|
|
|
|
def update_json_file_release(json_file, latest_release):
|
|
if isinstance(latest_release, list) and latest_release:
|
|
latest_release = latest_release[0]
|
|
else:
|
|
print("Error getting latest release")
|
|
return
|
|
|
|
try:
|
|
with open(json_file, "r") as file:
|
|
data = json.load(file)
|
|
except json.JSONDecodeError as e:
|
|
print(f"Error reading JSON file: {e}")
|
|
data = {"apps": []}
|
|
raise
|
|
|
|
app = data["apps"][0]
|
|
|
|
full_version = latest_release["tag_name"]
|
|
tag = latest_release["tag_name"]
|
|
# Extract version like 1.4.5 from tag, which may be like 'v1.4.5'
|
|
version_match = re.search(r"(\d+\.\d+\.\d+)", full_version)
|
|
if version_match:
|
|
version = version_match.group(1)
|
|
else:
|
|
print("Error: Could not parse version from tag_name.")
|
|
return
|
|
version_date = latest_release["published_at"]
|
|
date_obj = datetime.strptime(version_date, "%Y-%m-%dT%H:%M:%SZ")
|
|
version_date = date_obj.strftime("%Y-%m-%d")
|
|
|
|
description = latest_release["body"]
|
|
description = prepare_description(description)
|
|
|
|
assets = latest_release.get("assets", [])
|
|
download_url = None
|
|
size = None
|
|
for asset in assets:
|
|
# venera-ios-1.4.5+145.ipa
|
|
if asset["name"] == f"venera-ios-{version}+{version.replace('.', '')}.ipa":
|
|
download_url = asset["browser_download_url"]
|
|
size = asset["size"]
|
|
break
|
|
|
|
if download_url is None or size is None:
|
|
print("Error: IPA file not found in release assets.")
|
|
return
|
|
|
|
version_entry = {
|
|
"version": version,
|
|
"date": version_date,
|
|
"localizedDescription": description,
|
|
"downloadURL": download_url,
|
|
"size": size
|
|
}
|
|
|
|
duplicate_entries = [item for item in app["versions"] if item["version"] == version]
|
|
if duplicate_entries:
|
|
app["versions"].remove(duplicate_entries[0])
|
|
|
|
app["versions"].insert(0, version_entry)
|
|
|
|
app.update({
|
|
"version": version,
|
|
"versionDate": version_date,
|
|
"versionDescription": description,
|
|
"downloadURL": download_url,
|
|
"size": size
|
|
})
|
|
|
|
if "news" not in data:
|
|
data["news"] = []
|
|
|
|
news_identifier = f"release-{full_version}"
|
|
date_string = date_obj.strftime("%d/%m/%y")
|
|
news_entry = {
|
|
"appID": "com.github.wgh136.venera",
|
|
"caption": f"Update of Venera just got released!",
|
|
"date": latest_release["published_at"],
|
|
"identifier": news_identifier,
|
|
"notify": True,
|
|
"tintColor": "#0784FC",
|
|
"title": f"{full_version} - Venera {date_string}",
|
|
"url": f"https://github.com/venera-app/venera/releases/tag/{tag}"
|
|
}
|
|
|
|
news_entry_exists = any(item["identifier"] == news_identifier for item in data["news"])
|
|
if not news_entry_exists:
|
|
data["news"].append(news_entry)
|
|
|
|
try:
|
|
with open(json_file, "w") as file:
|
|
json.dump(data, file, indent=2)
|
|
print("JSON file updated successfully.")
|
|
except IOError as e:
|
|
print(f"Error writing to JSON file: {e}")
|
|
raise
|
|
|
|
def main():
|
|
repo_url = "venera-app/venera"
|
|
is_nightly = "NIGHTLY_LINK" in os.environ
|
|
|
|
try:
|
|
fetched_data_latest = fetch_latest_release(repo_url)
|
|
json_file = "alt_store.json"
|
|
update_json_file_release(json_file, fetched_data_latest)
|
|
except Exception as e:
|
|
print(f"An error occurred: {e}")
|
|
raise
|
|
|
|
if __name__ == "__main__":
|
|
main()
|