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

68 lines
2.2 KiB
Python

"""
Меняет порядок вкладок в панели навигации
"replace_navbar": {
"enabled": true,
"items": ["home", "discover", "feed", "bookmarks", "profile"]
}
"""
__author__ = "wowlikon <wowlikon@gmail.com>"
__version__ = "1.0.0"
from typing import Any, Dict, List
from lxml import etree
from pydantic import Field
from tqdm import tqdm
from utils.config import PatchTemplate
class Patch(PatchTemplate):
priority: int = Field(frozen=True, exclude=True, default=0)
items: List[str] = Field(
["home", "discover", "feed", "bookmarks", "profile"],
description="Список элементов в панели навигации",
)
def apply(self, base: Dict[str, Any]) -> bool:
file_path = "./decompiled/res/menu/bottom.xml"
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse(file_path, parser)
root = tree.getroot()
# Получение элементов панели навигации
items = root.findall("item", namespaces=base["xml_ns"])
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_by_id = {get_id_suffix(item): item for item in items}
existing_order = [get_id_suffix(item) for item in items]
# Размещение в новом порядке
ordered_items = []
for key in self.items:
if key in items_by_id:
ordered_items.append(items_by_id[key])
# Если есть не указанные в конфиге они помещаются в конец списка
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 i in root.findall("item", namespaces=base["xml_ns"]):
root.remove(i)
for item in ordered_items:
root.append(item)
tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8")
return True