Files
patcher/patches/settings_urls.py
2025-12-28 17:47:56 +03:00

148 lines
5.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Добавляет в настройки ссылки и добвляет текст к версии приложения
"settings_urls": {
"enabled": true,
"menu": {
"Раздел": [
{
"title": "Заголовок",
"description": "Описание",
"url": "ссылка",
"icon": "@drawable/ic_custom_telegram",
"icon_space_reserved": "false"
},
...
],
...
]
},
"version": " by wowlikon"
}
"""
__author__ = "wowlikon <wowlikon@gmail.com>"
__version__ = "1.0.0"
import shutil
from typing import Any, Dict, List
from lxml import etree
from pydantic import Field
from utils.config import PatchTemplate
from utils.public import insert_after_public
# Config
DEFAULT_MENU = {
"Мы в социальных сетях": [
{
"title": "wowlikon",
"description": "Разработчик",
"url": "https://t.me/wowlikon",
"icon": "@drawable/ic_custom_telegram",
"icon_space_reserved": "false",
},
{
"title": "Kentai Radiquum",
"description": "Разработчик",
"url": "https://t.me/radiquum",
"icon": "@drawable/ic_custom_telegram",
"icon_space_reserved": "false",
},
{
"title": "Мы в Telegram",
"description": "Подпишитесь на канал, чтобы быть в курсе последних новостей.",
"url": "https://t.me/http_teapod",
"icon": "@drawable/ic_custom_telegram",
"icon_space_reserved": "false",
},
],
"Прочее": [
{
"title": "Помочь проекту",
"description": "Вы можете помочь нам с идеями, написанием кода или тестированием.",
"url": "https://git.wowlikon.tech/anixart-mod",
"icon": "@drawable/ic_custom_crown",
"icon_space_reserved": "false",
}
],
}
class Patch(PatchTemplate):
priority: int = Field(frozen=True, exclude=True, default=0)
version: str = Field(" by wowlikon", description="Суффикс версии")
menu: Dict[str, List[Dict[str, str]]] = Field(DEFAULT_MENU, description="Меню")
def make_category(self, ns, name, items):
cat = etree.Element("PreferenceCategory", nsmap=ns)
cat.set(f"{{{ns['android']}}}title", name)
cat.set(f"{{{ns['app']}}}iconSpaceReserved", "false")
for item in items:
pref = etree.SubElement(cat, "Preference", nsmap=ns)
pref.set(f"{{{ns['android']}}}title", item["title"])
pref.set(f"{{{ns['android']}}}summary", item["description"])
pref.set(f"{{{ns['app']}}}icon", item["icon"])
pref.set(f"{{{ns['app']}}}iconSpaceReserved", item["icon_space_reserved"])
intent = etree.SubElement(pref, "intent", nsmap=ns)
intent.set(f"{{{ns['android']}}}action", "android.intent.action.VIEW")
intent.set(f"{{{ns['android']}}}data", item["url"])
intent.set(f"{{{ns['app']}}}iconSpaceReserved", item["icon_space_reserved"])
return cat
def apply(self, base: Dict[str, Any]) -> bool:
# Добавление кастомных иконок
shutil.copy(
"./resources/ic_custom_crown.xml",
"./decompiled/res/drawable/ic_custom_crown.xml",
)
insert_after_public("warning_error_counter_background", "ic_custom_crown")
shutil.copy(
"./resources/ic_custom_telegram.xml",
"./decompiled/res/drawable/ic_custom_telegram.xml",
)
insert_after_public("warning_error_counter_background", "ic_custom_telegram")
file_path = "./decompiled/res/xml/preference_main.xml"
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(file_path, parser)
root = tree.getroot()
# Вставка новых пунктов перед последним
pos = root.index(root[-1])
for section, items in self.menu.items():
root.insert(pos, self.make_category(base["xml_ns"], section, items))
pos += 1
# Сохранение
tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8")
# Добавление суффикса версии
filepaths = [
"./decompiled/smali_classes2/com/swiftsoft/anixartd/ui/activity/UpdateActivity.smali",
"./decompiled/smali_classes2/com/swiftsoft/anixartd/ui/fragment/main/preference/MainPreferenceFragment.smali",
]
for filepath in filepaths:
content = ""
with open(filepath, "r", encoding="utf-8") as file:
for line in file.readlines():
if (
'"\u0412\u0435\u0440\u0441\u0438\u044f'.encode(
"unicode_escape"
).decode()
in line
):
content += (
line[: line.rindex('"')]
+ self.version
+ line[line.rindex('"') :]
)
else:
content += line
with open(filepath, "w", encoding="utf-8") as file:
file.write(content)
return True