This commit is contained in:
2026-08-08 00:48:09 +08:00
parent ede373b888
commit 32f5d434b1
4 changed files with 52 additions and 20 deletions
+36 -10
View File
@@ -2,6 +2,7 @@ import ctypes
import json
import os
import sys
from dataclasses import field, dataclass
from typing import Optional, Dict, Any, List
@@ -14,16 +15,33 @@ def get_lib_filename(base_name):
return f"lib{base_name}.so"
class FetchData:
event_id: int
card_paths: List[str]
@dataclass
class FetchResultCard:
text: str = ""
path: List[str] = field(default_factory=list)
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> 'FetchData':
instance = cls()
instance.event_id = data.get("event_id", 0)
instance.card_paths = data.get("card_paths", [])
return instance
def from_dict(cls, data: Dict[str, Any]) -> 'FetchResultCard':
return cls(
text=data.get("text", ""),
path=data.get("path", []),
)
@dataclass
class FetchResult:
event_id: int = 0
cards: List[FetchResultCard] = field(default_factory=list)
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> 'FetchResult':
return cls(
event_id=data.get("event_id", 0),
cards=[
FetchResultCard.from_dict(card)
for card in data.get("cards", [])
],
)
class SekaiSyncLib:
@@ -36,6 +54,10 @@ class SekaiSyncLib:
self.lib.proxy.argtypes = [ctypes.c_char_p]
self.lib.proxy.restype = None
# pjsk_proxy(x: *const c_char)
self.lib.pjsk_proxy.argtypes = [ctypes.c_char_p]
self.lib.pjsk_proxy.restype = None
# ghp(x: *const c_char)
self.lib.ghp.argtypes = [ctypes.c_char_p]
self.lib.ghp.restype = None
@@ -72,6 +94,10 @@ class SekaiSyncLib:
"""设置代理,传 None 或空字符串可清除"""
self.lib.proxy(self._str_to_bytes(proxy_url))
def set_pjsk_proxy(self, proxy_url: Optional[str]):
"""设置 pjsk_proxy,传 None 或空字符串可清除"""
self.lib.pjsk_proxy(self._str_to_bytes(proxy_url))
def set_ghp(self, token: Optional[str]):
"""设置 GitHub Token,传 None 或空字符串可清除"""
self.lib.ghp(self._str_to_bytes(token))
@@ -96,7 +122,7 @@ class SekaiSyncLib:
"""
return self.lib.stop()
def fetch_data(self) -> Optional[FetchData]:
def fetch_data(self) -> Optional[FetchResult]:
# 1. 获取裸指针
ptr = self.lib.fetch_data()
@@ -112,7 +138,7 @@ class SekaiSyncLib:
# 3. 解码并反序列化 JSON
json_str = json_bytes.decode('utf-8')
return FetchData.from_dict(json.loads(json_str))
return FetchResult.from_dict(json.loads(json_str))
finally:
# 4. 无论是否发生 JSON 解析异常,绝对保证释放 Rust 内存!