ui_qml.workers.contract_workers
源文件
ui_qml/workers/contract_workers.py· 由scripts/gen_api_docs.py自动生成,请勿手改
模块说明:
合同市场 — 后台 Worker 线程。
两类写库任务互斥:ContractFetchWorker(拉列表)与 ContractFillWorker(补物品) 都写 market.db,SQLite 是单写者 —— 桥在同一时刻只允许跑一个,见 ui_qml/bridge/contract_bridge.py 的 _busy_worker。
只给真正慢的事开线程:查库(最重一档实测 49 ms)走同步,不再开线程 —— 异步结果回来时视图可能正在销毁,实测会让 ui 档后续用例 access violation。 留在本模块的两件事都要打 ESI:拉列表(几十秒)与补物品(几万次请求、可中断)。
线程生命周期与桥解耦:桥随页面销毁,线程若还在跑会被连带析构,Qt 直接 abort。 所以 worker 一律 parent=None,由本模块的 spawn() 持强引用、跑完自摘; 对已销毁桥的信号投递由 Qt 自动断连兜底。
函数
spawn
def spawn(worker: QThread) -> QThread启动 worker 并由本模块持有,直到它跑完。
定义行:27
类
class ContractFetchWorker(继承 QThread)
拉取合同列表(不含物品)—— 每个星域拉完立刻落库。
定义行:35
方法
__init__
def __init__(self, region_ids: list[int], parent=None)⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:40
run
def run(self) -> None⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:44
class ContractFillWorker(继承 QThread)
后台补齐 —— 先补发布者名字,再补物品详情,分批拉、分批回写、可随时中断。
物品是「价差」列与图标列的前提,发布者名字是「去游戏里按发布者搜合同」的前提 (ESI 的合同端点只给 issuer_id,名字得另问 /universe/names/)。
两件事都可以由调用方收窄范围:自动补齐传当前列表的 id(一个星域 3.4 万份合同, 逐个打 ESI 没人等得起);两个都不传则补整个星域 —— 手动「补齐全部」走这条。
定义行:56
方法
__init__
def __init__(self, region_id: int, contract_type: str, issuer_ids: list[int] | None=None, contract_ids: list[int] | None=None, parent=None)⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:69
stop
def stop(self) -> None⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:84
run
def run(self) -> None⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:87
class ContractItemsLoadWorker(继承 QThread)
加载某份合同的物品明细(含市价,供详情面板显示)。
定义行:116
方法
__init__
def __init__(self, contract_id: int, region_id: int=0, price_type: str='sell', parent=None)⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:121
run
def run(self) -> None⚠️ 待补 docstring
此函数暂无 docstring,欢迎补充。
定义行:127