Улучшение cli и удобства создания патчей
Сборка мода / build (push) Successful in 2m16s

This commit is contained in:
2025-12-28 17:47:56 +03:00
parent ec047cd3a5
commit 70337ee3ec
35 changed files with 2200 additions and 1111 deletions
+42 -37
View File
@@ -7,56 +7,61 @@
}
"""
priority = 0
__author__ = "wowlikon <wowlikon@gmail.com>"
__version__ = "1.0.0"
from typing import Any, Dict, List
# imports
from lxml import etree
from tqdm import tqdm
from typing import Dict, List, Any
from pydantic import Field
from tqdm import tqdm
from utils.config import PatchConfig
from utils.config import PatchTemplate
#Config
class Config(PatchConfig):
items: List[str] = Field(["home", "discover", "feed", "bookmarks", "profile"], description="Список элементов в панели навигации")
# Patch
def apply(config: Config, base: Dict[str, Any]) -> bool:
file_path = "./decompiled/res/menu/bottom.xml"
class Patch(PatchTemplate):
priority: int = Field(frozen=True, exclude=True, default=0)
items: List[str] = Field(
["home", "discover", "feed", "bookmarks", "profile"],
description="Список элементов в панели навигации",
)
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(file_path, parser)
root = tree.getroot()
def apply(self, base: Dict[str, Any]) -> bool:
file_path = "./decompiled/res/menu/bottom.xml"
# Получение элементов панели навигации
items = root.findall("item", namespaces=base['xml_ns'])
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(file_path, parser)
root = tree.getroot()
def get_id_suffix(item):
full_id = item.get(f"{{{base['xml_ns']['android']}}}id")
return full_id.split("tab_")[-1] if full_id else None
# Получение элементов панели навигации
items = root.findall("item", namespaces=base["xml_ns"])
items_by_id = {get_id_suffix(item): item for item in items}
existing_order = [get_id_suffix(item) for item in items]
def get_id_suffix(item):
full_id = item.get(f"{{{base['xml_ns']['android']}}}id")
return full_id.split("tab_")[-1] if full_id else None
# Размещение в новом порядке
ordered_items = []
for key in config.items:
if key in items_by_id:
ordered_items.append(items_by_id[key])
items_by_id = {get_id_suffix(item): item for item in items}
existing_order = [get_id_suffix(item) for item in items]
# Если есть не указанные в конфиге они помещаются в конец списка
extra = [i for i in items if get_id_suffix(i) not in config.items]
if extra:
tqdm.write("⚠Найдены лишние элементы: " + str([get_id_suffix(i) for i in extra]))
ordered_items.extend(extra)
# Размещение в новом порядке
ordered_items = []
for key in self.items:
if key in items_by_id:
ordered_items.append(items_by_id[key])
for i in root.findall("item", namespaces=base['xml_ns']):
root.remove(i)
# Если есть не указанные в конфиге они помещаются в конец списка
extra = [i for i in items if get_id_suffix(i) not in self.items]
if extra:
tqdm.write(
"⚠Найдены лишние элементы: " + str([get_id_suffix(i) for i in extra])
)
ordered_items.extend(extra)
for item in ordered_items:
root.append(item)
for i in root.findall("item", namespaces=base["xml_ns"]):
root.remove(i)
tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8")
for item in ordered_items:
root.append(item)
return True
tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8")
return True