mirror of
https://github.com/jxxghp/MoviePilot-Plugins.git
synced 2026-05-24 23:16:49 +00:00
- 数据模型重构: 全面引入 Pydantic 模型(ClashConfig, Proxy, ProxyGroup 等)替代原有字典结构,提供更严格的数据验证与类型安全。 - 数据迁移机制: 新增 v2.1.0 数据升级脚本,支持将旧版代理、策略组及规则数据自动迁移至新架构。 - 配置补丁系统: 实现基于 JSON Patch 的细粒度配置修补机制,替代旧版覆盖逻辑,提升配置修改的灵活性。 - 服务层优化: 重写 ClashRuleProviderService 以适配新对象模型,增强代码可维护性与扩展性。 - API模型同步: 更新相关 API 数据模型以保持与内部数据结构的一致性。 - 用户界面: 批量规则管理和数据项隐藏支持
34 lines
946 B
Python
34 lines
946 B
Python
from pydantic import Field, RootModel, BaseModel
|
|
|
|
from .metadata import Metadata
|
|
|
|
|
|
class HostData(BaseModel):
|
|
domain: str
|
|
value: list[str]
|
|
using_cloudflare: bool
|
|
meta: Metadata = Field(default_factory=Metadata)
|
|
|
|
|
|
class Hosts(RootModel[list[HostData]]):
|
|
root: list[HostData] = Field(default_factory=list)
|
|
|
|
def __len__(self) -> int:
|
|
return len(self.root)
|
|
|
|
def update(self, domain: str, data: HostData):
|
|
self.root = [host for host in self.root if host.domain != domain]
|
|
self.root.append(data)
|
|
|
|
def delete(self, domain: str):
|
|
self.root = [host for host in self.root if host.domain != domain]
|
|
|
|
def to_dict(self, cloudflare: list[str]) -> dict[str, list[str]]:
|
|
hosts = {}
|
|
for host in self.root:
|
|
if host.using_cloudflare:
|
|
hosts[host.domain] = cloudflare
|
|
else:
|
|
hosts[host.domain] = host.value
|
|
return hosts
|