feat:ipv_type_prefer unset

This commit is contained in:
guorong.zheng 2025-01-21 11:35:35 +08:00
parent e4882adcec
commit 0462758598
5 changed files with 25 additions and 21 deletions

@ -60,15 +60,15 @@ hotel_page_num = 1
# 酒店源地区列表,"全部"表示所有地区 | Hotel source region list, "all" means all regions
hotel_region_list = 全部
# 结果中偏好的 IPv4 接口数量 | Preferred number of IPv4 interfaces in the result
ipv4_num = 5
ipv4_num =
# 结果中偏好的 IPv6 接口数量 | Preferred number of IPv6 interfaces in the result
ipv6_num = 5
ipv6_num =
# 强制认为当前网络支持IPv6跳过检测 | Force to consider that the current network supports IPv6, skip detection
ipv6_support = False
# 生成结果中接口的协议类型可选值ipv4、ipv6、全部、all | Protocol type of the interface in the generated result, optional values: ipv4, ipv6, 全部, all
ipv_type = 全部
# 接口协议类型偏好优先将该类型的接口排在结果前面可选值ipv4、ipv6、自动、auto | Interface protocol type preference, prefer to put this type of interface in front of the result, optional values: ipv4, ipv6, 自动, auto
ipv_type_prefer = 自动
ipv_type_prefer =
# 本地源文件路径,默认值: config/local.txt | Local source file path, Default value: config/local.txt
local_file = config/local.txt
# 结果中偏好的本地源接口数量 | Preferred number of local source interfaces in the result

@ -32,12 +32,12 @@ class PreferUI:
self.prefer_ipv_type_combo = ttk.Combobox(frame_prefer_ipv_type)
self.prefer_ipv_type_combo.pack(side=tk.LEFT, padx=4, pady=8)
self.prefer_ipv_type_combo["values"] = ("IPv4", "IPv6", "自动")
ipv_type_prefer = config.ipv_type_prefer
if ipv_type_prefer[0] == "ipv4":
ipv_type_prefer = config.ipv_type_prefer[0]
if ipv_type_prefer == "ipv4":
self.prefer_ipv_type_combo.current(0)
elif ipv_type_prefer[0] == "ipv6":
elif ipv_type_prefer == "ipv6":
self.prefer_ipv_type_combo.current(1)
else:
elif ipv_type_prefer in ["自动", "auto"]:
self.prefer_ipv_type_combo.current(2)
self.prefer_ipv_type_combo.bind(
"<<ComboboxSelected>>", self.update_ipv_type_prefer
@ -190,6 +190,7 @@ class ConfigOption:
self.combo_box.get()
]
origin_type_prefer_list[index] = select_value
self.entry.delete(0, tk.END)
self.entry.insert(
0,
config.source_limits[self.origin_type_prefer_obj[self.combo_box.get()]],

@ -661,7 +661,7 @@ def write_channel_to_file(data, ipv6=False, callback=None):
no_result_name = []
open_empty_category = config.open_empty_category
ipv_type_prefer = list(config.ipv_type_prefer)
if any(pref in ipv_type_prefer for pref in ["自动", "auto"]) or not ipv_type_prefer:
if any(pref in ipv_type_prefer for pref in ["自动", "auto"]):
ipv_type_prefer = ["ipv6", "ipv4"] if ipv6 else ["ipv4", "ipv6"]
origin_type_prefer = config.origin_type_prefer
first_cate = True

@ -86,17 +86,21 @@ class ConfigManager:
return [
type.strip().lower()
for type in self.config.get(
"Settings", "ipv_type_prefer", fallback="auto"
"Settings", "ipv_type_prefer", fallback=""
).split(",")
]
@property
def ipv4_num(self):
return self.config.getint("Settings", "ipv4_num", fallback=15)
return self.config.getint("Settings", "ipv4_num", fallback=5) if self.config.get(
"Settings", "ipv_type_prefer", fallback=""
) else ""
@property
def ipv6_num(self):
return self.config.getint("Settings", "ipv6_num", fallback=15)
return self.config.getint("Settings", "ipv6_num", fallback=5) if self.config.get(
"Settings", "ipv_type_prefer", fallback=""
) else ""
@property
def ipv6_support(self):
@ -105,6 +109,7 @@ class ConfigManager:
@property
def ipv_limit(self):
return {
"all": self.urls_limit,
"ipv4": self.ipv4_num,
"ipv6": self.ipv6_num,
}
@ -140,6 +145,7 @@ class ConfigManager:
@property
def source_limits(self):
return {
"all": self.urls_limit,
"local": self.local_num,
"hotel": self.hotel_num,
"multicast": self.multicast_num,

@ -151,11 +151,14 @@ def get_total_urls(info_list, ipv_type_prefer, origin_type_prefer):
"""
Get the total urls from info list
"""
ipv_prefer_bool = bool(ipv_type_prefer)
origin_prefer_bool = bool(origin_type_prefer)
if not ipv_prefer_bool:
ipv_type_prefer = ["all"]
if not origin_prefer_bool:
origin_type_prefer = ["all"]
categorized_urls = {
origin: {"ipv4": [], "ipv6": []} for origin in origin_type_prefer
origin: {ipv_type: []} for origin in origin_type_prefer for ipv_type in ipv_type_prefer
}
total_urls = []
for url, _, resolution, origin in info_list:
@ -190,15 +193,9 @@ def get_total_urls(info_list, ipv_type_prefer, origin_type_prefer):
if not origin_prefer_bool:
origin = "all"
if url_is_ipv6:
categorized_urls[origin]["ipv6"].append(url)
else:
categorized_urls[origin]["ipv4"].append(url)
categorized_urls[origin]["all" if not ipv_prefer_bool else "ipv6" if url_is_ipv6 else "ipv4"].append(url)
ipv_num = {
"ipv4": 0,
"ipv6": 0,
}
ipv_num = {ipv_type: 0 for ipv_type in ipv_type_prefer}
urls_limit = config.urls_limit
for origin in origin_type_prefer:
if len(total_urls) >= urls_limit:
@ -221,7 +218,7 @@ def get_total_urls(info_list, ipv_type_prefer, origin_type_prefer):
continue
if config.open_supply:
ipv_type_total = list(dict.fromkeys(ipv_type_prefer + ["ipv4", "ipv6"]))
ipv_type_total = list(dict.fromkeys(ipv_type_prefer + (["ipv4", "ipv6"] if ipv_prefer_bool else [])))
if len(total_urls) < urls_limit:
for origin in origin_type_prefer:
if len(total_urls) >= urls_limit: