Skip to content

Commit 53a9d53

Browse files
committed
feat: 简化配置项的取值与写入
1 parent f73a623 commit 53a9d53

8 files changed

Lines changed: 66 additions & 51 deletions

File tree

Gui/InfoGui.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ def load_data(self, data: ServerInfo):
111111
self.data = data
112112

113113
self.text.configure(text=f"人数:{data.player_online}/{data.player_max}")
114-
if not user_settings_loader.configs["players_all"]:
114+
if not config.accumulation_player:
115115
self.players.clear()
116116
for player in data.players:
117117
if player["name"] not in self.players:
@@ -209,7 +209,7 @@ def __init__(self, master: Misc):
209209

210210
super(VersionInfo, self).__init__(master)
211211
self.data = None
212-
self.if_version_name_shown_as_label: bool = user_settings_loader.configs['if_version_name_shown_as_label']
212+
self.version_name_label_show: bool = config.version_name_label_show
213213

214214
self.version_name_frame = Frame(self)
215215
self.version_name_label = Label(self.version_name_frame, anchor=CENTER)
@@ -235,7 +235,7 @@ def bind_tip(self):
235235
def pack_widgets(self):
236236
self.version_name_frame.pack()
237237
self.version_name_label.pack(side=LEFT)
238-
if not self.if_version_name_shown_as_label:
238+
if not self.version_name_label_show:
239239
self.version_name_text.configure(height=1, width=20)
240240
self.version_name_text.pack(side=LEFT)
241241
self.minecraft_version.pack()
@@ -251,7 +251,7 @@ def load_data(self, data: ServerInfo):
251251
else:
252252
description_json = [{"text": data.version_name}]
253253
self.version_name_label.configure(text="版本名:")
254-
if self.if_version_name_shown_as_label:
254+
if self.version_name_label_show:
255255
self.version_name_label.configure(text=f"版本名:{data.version_name}")
256256
self.version_name_text.load_motd(description_json)
257257
self.minecraft_version.configure(text=f"正式版本名:{data.protocol_name}")

Gui/ScanBarGui.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def __init__(self, master: Misc, logger: Logger, server_list: ServerList, hot_vi
4646
self.host_input = TextCombobox(self.input_frame, "域名: ", server_addresses)
4747
self.timeout_input = EntryScaleFloatFrame(self.input_frame, 0.1, 3.0, 0.2, "超时时间: ")
4848
self.thread_num_input = EntryScaleIntFrame(self.input_frame, 1,
49-
Vars.user_settings_loader.configs["max_thread_number"],
49+
Vars.config.max_thread_number,
5050
1,
5151
"线程数: ")
5252
self.range_input = RangeSelector(self.input_frame, "端口选择: ", 1024, 65535)
@@ -145,7 +145,7 @@ def start_scan(self): # 20500 - 25000
145145

146146
self.gui.servers.empty_tip.configure(text="检验连通性...")
147147
self.gui.update()
148-
if user_settings_loader.configs['ping_before_scan'] and not self.check_host(host):
148+
if config.ping_before_scan and not self.check_host(host):
149149
self.gui.servers.empty_tip.configure(text="没有服务器")
150150
return
151151
self.gui.servers.empty_tip.configure(text="没有服务器")

Gui/ServerListGui.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ def __init__(self, master: Misc, logger: Logger):
249249
self.sep = Separator(self, orient=HORIZONTAL) # 分割线
250250
self.servers_frame = ScrolledFrame(self, autohide=True, height=300) # 装服务器的容器
251251
self.empty_tip = Label(self, text="没有服务器",
252-
font=(Vars.user_settings_loader.configs['global_font'], 25)) # 提示
252+
font=(Vars.config.global_font, 25)) # 提示
253253
self.record_bar = RecordBar(self, self) # 保存加载功能
254254
self.servers_info = ServerInfoFrame(self.record_bar) # 服务器数量信息
255255

@@ -363,7 +363,7 @@ def __init__(self, master: Misc, data: ServerInfo):
363363

364364
self.favicon = Label(self)
365365
self.MOTD = MOTD(self, viewable_callback=self.viewable_callback)
366-
self.base_info = Label(self, font=(Vars.user_settings_loader.configs['global_font'], 9))
366+
self.base_info = Label(self, font=(Vars.config.configs['global_font'], 9))
367367

368368
self.events_add()
369369
self.pack_weights()

Gui/SettingsFrame.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ def __init__(self, master: Misc):
3838
super().__init__(master)
3939

4040
self.language_support = {
41-
"if_version_name_shown_as_label": "将 VersionName 显示为纯文本格式",
41+
"version_name_label_show": "将 VersionName 显示为纯文本格式",
4242
"theme_name": "主题 ( 不建议在此处修改 )",
4343
"ping_before_scan": "扫描之前先检测连通性",
4444
"global_font": "字体",
4545
"max_thread_number": "扫描时允许的最大线程数",
46-
"MOTD_use_unicode_font": "MOTD全部使用Unifont字体显示",
47-
"players_all": "服务器玩家累积并去重",
46+
"MOTD_use_unifont": "MOTD全部使用Unifont字体显示",
47+
"accumulation_player": "服务器玩家累积并去重",
4848
"allow_hor_resize": "允许水平调整窗口 ( 很卡 )",
4949
"use_proxy": "使用代理",
5050
"proxy_kind": "代理类型 (sock5, sock4)",
@@ -54,7 +54,7 @@ def __init__(self, master: Misc):
5454

5555
self.config_frame = ScrolledFrame(self)
5656
self.configs = {}
57-
for name, value in user_settings_loader.configs.items():
57+
for name, value in config.configs.items():
5858
self.configs[name] = SettingFrame(self.config_frame, self.language_support.get(name, name + ' ( 不生效 ) '),
5959
name, value, use_sizer=False)
6060

@@ -75,8 +75,8 @@ def pack_widgets(self):
7575

7676
def confirm(self):
7777
for name, widget in self.configs.items():
78-
user_settings_loader.configs[name] = widget.get()
78+
config.configs[name] = widget.get()
7979

8080
def update_settings(self):
8181
for name, widget in self.configs.items():
82-
widget.set(user_settings_loader.configs[name])
82+
widget.set(config.configs[name])

Gui/UserInterface.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515

1616

1717
def set_default_font():
18-
font.nametofont("TkDefaultFont").config(family=Vars.user_settings_loader.configs['global_font'], size=10)
18+
font.nametofont("TkDefaultFont").config(family=Vars.config.global_font, size=10)
1919

2020

2121
class Title(Label):
2222
def __init__(self, master: Misc):
2323
super(Title, self).__init__(master,
2424
text="Minecraft服务器扫描器",
25-
font=(Vars.user_settings_loader.configs['global_font'], 24))
25+
font=(Vars.config.global_font, 24))
2626

2727

2828
class TitleBar(Frame):
@@ -36,7 +36,7 @@ def __init__(self, master: Misc):
3636

3737
class GUI(Window):
3838
def __init__(self):
39-
super(GUI, self).__init__(themename=user_settings_loader.configs['theme_name'])
39+
super(GUI, self).__init__(themename=config.theme_name)
4040

4141
set_default_font()
4242
self.config_root_window()
@@ -56,7 +56,7 @@ def __init__(self):
5656
def config_root_window(self): # 设置窗体
5757
self.wm_title("MC服务器扫描器") # 设置标题
5858
self.protocol("WM_DELETE_WINDOW", self.on_delete_window)
59-
self.wm_resizable(user_settings_loader.configs["allow_hor_resize"], True)
59+
self.wm_resizable(config.configs["allow_hor_resize"], True)
6060
Sty.set_obj(self._style)
6161
Thread(target=self.set_icon).start()
6262
#Thread(target=self.place_window_center).start()
@@ -72,7 +72,7 @@ def set_icon(self):
7272

7373
def on_delete_window(self):
7474
self.scan_bar.close_save_config()
75-
UserSettingsSaver.save_user_configs(user_settings_loader)
75+
UserSettingsSaver.save_user_configs(config)
7676
self.destroy()
7777

7878
def pack_widgets(self):

Gui/Widgets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def return_font():
104104
Notes:
105105
有概率会引发 RuntimeError, 原因未知
106106
"""
107-
if Vars.user_settings_loader.configs['MOTD_use_unicode_font']:
107+
if Vars.config.MOTD_use_unifont:
108108
if "UnifontExMono" not in font.families():
109109
custom_font = font.Font(font="assets/UnifontExMono.ttf", family="UnifontExMono")
110110
else:
@@ -553,7 +553,7 @@ def thread_load_themes(self):
553553

554554
def on_theme_selected(self, _):
555555
self.style.theme_use(self.theme_selector.get())
556-
Vars.user_settings_loader.configs['theme_name'] = self.theme_selector.get()
556+
Vars.config.set_value("theme_name", self.theme_selector.get())
557557

558558

559559
class RangeSelector(Frame):

Libs/Vars.py

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -204,32 +204,46 @@ def __call__(self) -> float:
204204

205205

206206
class UserSettingsLoader:
207+
version_name_label_show: bool = False
208+
theme_name: str = "darkly"
209+
ping_before_scan: bool = True
210+
global_font: str = "微软雅黑"
211+
max_thread_number: int = 256
212+
MOTD_use_unifont: bool = True
213+
accumulation_player: bool = True
214+
allow_hor_resize: bool = True
215+
use_proxy: bool = False
216+
proxy_kind: str = "sock5"
217+
proxy_host: str = "127.0.0.1"
218+
proxy_port: int = 1080
219+
207220
def __init__(self):
208221
self.config_path = path_join(config_dir, "user_configs.json")
209-
self.configs: Dict = self.defaults()
222+
self.configs: dict[str, Any] = self.find_default_config()
210223
if not exists(self.config_path):
211224
return
212225
with open(self.config_path, "r", encoding="utf-8") as f:
213-
json_configs: Dict = json.load(f)
226+
json_configs: dict[str, Any] = json.load(f)
214227
if self.configs.keys() != json_configs.keys():
215228
warnings.warn(f"可能存在潜在的设置信息不兼容问题. 以下是 user_configs.json 中的内容: {json_configs}")
216229
self.configs = {**self.configs, **json_configs} # 酷炫就完事了 实际含义是拼接两个字典 并且有重复时遵从后者
230+
for name, value in json_configs.items():
231+
if name not in self.configs:
232+
print(f"未知的设置项: {name} -> {value}")
233+
continue
234+
setattr(self, name, value)
235+
236+
def set_value(self, key: str, value: Any):
237+
setattr(self, key, value)
238+
self.configs[key] = value
239+
240+
def find_default_config(self):
241+
config_dict: dict[str, Any] = {}
242+
for name in self.__annotations__.keys():
243+
value = getattr(self, name)
244+
config_dict[name] = value
245+
return config_dict
217246

218-
@staticmethod
219-
def defaults() -> Dict:
220-
return {'if_version_name_shown_as_label': False,
221-
'theme_name': "darkly",
222-
'ping_before_scan': True,
223-
"global_font": "微软雅黑",
224-
"max_thread_number": 256,
225-
"MOTD_use_unicode_font": True,
226-
"players_all": False,
227-
"allow_hor_resize": False,
228-
"use_proxy": False,
229-
"proxy_kind": "sock5",
230-
"proxy_host": "127.0.0.1",
231-
"proxy_port": 11451
232-
}
233247

234248

235249
class UserSettingsSaver:
@@ -243,6 +257,6 @@ def save_user_configs(loader: UserSettingsLoader):
243257
UserAddressOperator.read_config_file_list()
244258

245259
scale_rater = ScaleRater()
246-
user_settings_loader = UserSettingsLoader()
260+
config: UserSettingsLoader = UserSettingsLoader()
247261

248262
Sty = StyOP(None)

Network/Scanner.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from Libs import Vars
1515
import socks
1616

17-
from Libs.Vars import user_settings_loader
17+
from Libs.Vars import config
1818

1919
ServerPinger: Any = None
2020
Address: Any = None
@@ -49,6 +49,16 @@ def __init__(self):
4949
self.worker_count: int = 0 # 线程数
5050
self.working_worker: int = 0 # 工作中的线程数
5151
self.thread_num_lock = Lock()
52+
self.set_proxy()
53+
54+
@staticmethod
55+
def set_proxy():
56+
if config.use_proxy:
57+
kind_map = {"sock5": socks.SOCKS5,
58+
"sock4": socks.SOCKS4}
59+
socks.set_default_proxy(kind_map[config.proxy_kind], config.proxy_host, config.proxy_port)
60+
from mcstatus.protocol import connection
61+
connection.socket.socket = socks.socksocket
5262

5363
def config(self, timeout: float = 0.7, thread_num: int = 256, callback: object = lambda x: None):
5464
self.thread_num = thread_num
@@ -61,6 +71,8 @@ def run(self, host: str, port_range: range):
6171
self.work_queue.get(block=False)
6272
except Empty:
6373
break
74+
75+
self.set_proxy()
6476
self.in_scan = True
6577
self.add_task(host, port_range)
6678

@@ -168,17 +180,6 @@ def __init__(self, host: str = "", port: int = 25565, timeout: float = 0.7, prot
168180
self.port = port
169181
self.protocol = protocol_version
170182
self.timeout = timeout
171-
self.set_proxy()
172-
173-
@staticmethod
174-
def set_proxy():
175-
if user_settings_loader.configs["use_proxy"]:
176-
kind_map = {"sock5": socks.SOCKS5,
177-
"sock4": socks.SOCKS4}
178-
socks.set_default_proxy(kind_map[user_settings_loader.configs["proxy_kind"]],
179-
user_settings_loader.configs["proxy_host"], user_settings_loader.configs["proxy_port"])
180-
from mcstatus.protocol import connection
181-
connection.socket.socket = socks.socksocket
182183

183184
def get_server_info(self) -> dict:
184185
"""

0 commit comments

Comments
 (0)