Обновление структуры проекта, использование pydantic для конфигураций, улучшение отчёта о патчах
Build mod / build (push) Successful in 6m39s
Build mod / build (push) Successful in 6m39s
This commit is contained in:
+47
-22
@@ -3,16 +3,19 @@
|
||||
|
||||
"color_theme": {
|
||||
"enabled": true,
|
||||
"logo": {
|
||||
"gradient": {
|
||||
"angle": 0.0,
|
||||
"start_color": "#ffccff00",
|
||||
"end_color": "#ffcccc00"
|
||||
},
|
||||
"ears_color": "#ffffd0d0"
|
||||
},
|
||||
"colors": {
|
||||
"primary": "#ccff00",
|
||||
"secondary": "#ffffd700",
|
||||
"secondary": "#ffcccc00",
|
||||
"background": "#ffffff",
|
||||
"text": "#000000"
|
||||
},
|
||||
"gradient": {
|
||||
"angle": "135.0",
|
||||
"from": "#ffff6060",
|
||||
"to": "#ffccff00"
|
||||
}
|
||||
}
|
||||
"""
|
||||
@@ -21,20 +24,40 @@ priority = 0
|
||||
|
||||
# imports
|
||||
from lxml import etree
|
||||
from typing import Dict, Any
|
||||
from pydantic import Field, BaseModel
|
||||
|
||||
from utils.config import PatchConfig
|
||||
from utils.public import (
|
||||
insert_after_public,
|
||||
insert_after_color,
|
||||
change_color,
|
||||
)
|
||||
|
||||
#Config
|
||||
class Gradient(BaseModel):
|
||||
angle: float = Field(0.0, description="Угол градиента")
|
||||
start_color: str = Field("#ffccff00", description="Начальный цвет градиента")
|
||||
end_color: str = Field("#ffcccc00", description="Конечный цвет градиента")
|
||||
|
||||
class Logo(BaseModel):
|
||||
gradient: Gradient = Field(Gradient(), description="Настройки градиента") # type: ignore [reportCallIssue]
|
||||
ears_color: str = Field("#ffd0d0d0", description="Цвет ушей логотипа")
|
||||
|
||||
class Colors(BaseModel):
|
||||
primary: str = Field("#ccff00", description="Основной цвет")
|
||||
secondary: str = Field("#ffcccc00", description="Вторичный цвет")
|
||||
background: str = Field("#ffffff", description="Фоновый цвет")
|
||||
text: str = Field("#000000", description="Цвет текста")
|
||||
|
||||
class Config(PatchConfig):
|
||||
logo: Logo = Field(Logo(), description="Настройки цветов логотипа") # type: ignore [reportCallIssue]
|
||||
colors: Colors = Field(Colors(), description="Настройки цветов") # type: ignore [reportCallIssue]
|
||||
|
||||
# Patch
|
||||
def apply(config: dict) -> bool:
|
||||
main_color = config["colors"]["primary"]
|
||||
splash_color = config["colors"]["secondary"]
|
||||
gradient_angle = config["gradient"]["angle"]
|
||||
gradient_from = config["gradient"]["from"]
|
||||
gradient_to = config["gradient"]["to"]
|
||||
def apply(config: Config, base: Dict[str, Any]) -> bool:
|
||||
main_color = config.colors.primary
|
||||
splash_color = config.colors.secondary
|
||||
|
||||
# No connection alert coolor
|
||||
with open("./decompiled/assets/no_connection.html", "r", encoding="utf-8") as file:
|
||||
@@ -57,9 +80,9 @@ def apply(config: dict) -> bool:
|
||||
root = tree.getroot()
|
||||
|
||||
# Change attributes with namespace
|
||||
root.set(f"{{{config['xml_ns']['android']}}}angle", gradient_angle)
|
||||
root.set(f"{{{config['xml_ns']['android']}}}startColor", gradient_from)
|
||||
root.set(f"{{{config['xml_ns']['android']}}}endColor", gradient_to)
|
||||
root.set(f"{{{base['xml_ns']['android']}}}angle", str(config.logo.gradient.angle))
|
||||
root.set(f"{{{base['xml_ns']['android']}}}startColor", config.logo.gradient.start_color)
|
||||
root.set(f"{{{base['xml_ns']['android']}}}endColor", config.logo.gradient.end_color)
|
||||
|
||||
# Save back
|
||||
tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8")
|
||||
@@ -72,10 +95,12 @@ def apply(config: dict) -> bool:
|
||||
root = tree.getroot()
|
||||
|
||||
# Finding "path"
|
||||
for el in root.findall("path", namespaces=config["xml_ns"]):
|
||||
name = el.get(f"{{{config['xml_ns']['android']}}}name")
|
||||
for el in root.findall("path", namespaces=base["xml_ns"]):
|
||||
name = el.get(f"{{{base['xml_ns']['android']}}}name")
|
||||
if name == "path":
|
||||
el.set(f"{{{config['xml_ns']['android']}}}fillColor", splash_color)
|
||||
el.set(f"{{{base['xml_ns']['android']}}}fillColor", config.colors.secondary)
|
||||
elif name in ["path_1", "path_2"]:
|
||||
el.set(f"{{{base['xml_ns']['android']}}}fillColor", config.logo.ears_color)
|
||||
|
||||
# Save back
|
||||
tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8")
|
||||
@@ -88,11 +113,11 @@ def apply(config: dict) -> bool:
|
||||
root = tree.getroot()
|
||||
|
||||
# Change attributes with namespace
|
||||
root.set(f"{{{config['xml_ns']['android']}}}angle", gradient_angle)
|
||||
items = root.findall("item", namespaces=config['xml_ns'])
|
||||
root.set(f"{{{base['xml_ns']['android']}}}angle", str(config.logo.gradient.angle))
|
||||
items = root.findall("item", namespaces=base['xml_ns'])
|
||||
assert len(items) == 2
|
||||
items[0].set(f"{{{config['xml_ns']['android']}}}color", gradient_from)
|
||||
items[1].set(f"{{{config['xml_ns']['android']}}}color", gradient_to)
|
||||
items[0].set(f"{{{base['xml_ns']['android']}}}color", config.logo.gradient.start_color)
|
||||
items[1].set(f"{{{base['xml_ns']['android']}}}color", config.logo.gradient.end_color)
|
||||
|
||||
# Save back
|
||||
tree.write(file_path, pretty_print=True, xml_declaration=True, encoding="utf-8")
|
||||
|
||||
Reference in New Issue
Block a user