This commit is contained in:
+42
-37
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user