fixed: Fix issue where some nodepacks were displayed redundantly in custom nodes manager.

This commit is contained in:
Dr.Lt.Data
2025-06-25 00:18:18 +09:00
parent 2795d00d1e
commit 815784e809
4 changed files with 53 additions and 12 deletions

View File

@@ -43,7 +43,7 @@ import manager_downloader
from node_package import InstalledNodePackage
version_code = [3, 33, 1]
version_code = [3, 33, 2]
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
@@ -400,32 +400,72 @@ class ManagedResult:
return self
class NormalizedKeyDict(dict):
class NormalizedKeyDict:
def __init__(self):
self._store = {}
self._key_map = {}
def _normalize_key(self, key):
if isinstance(key, str):
return key.strip().lower()
return key
def __setitem__(self, key, value):
super().__setitem__(self._normalize_key(key), value)
norm_key = self._normalize_key(key)
self._key_map[norm_key] = key
self._store[key] = value
def __getitem__(self, key):
return super().__getitem__(self._normalize_key(key))
norm_key = self._normalize_key(key)
original_key = self._key_map[norm_key]
return self._store[original_key]
def __delitem__(self, key):
return super().__delitem__(self._normalize_key(key))
norm_key = self._normalize_key(key)
original_key = self._key_map.pop(norm_key)
del self._store[original_key]
def __contains__(self, key):
return super().__contains__(self._normalize_key(key))
return self._normalize_key(key) in self._key_map
def get(self, key, default=None):
return super().get(self._normalize_key(key), default)
return self[key] if key in self else default
def setdefault(self, key, default=None):
return super().setdefault(self._normalize_key(key), default)
if key in self:
return self[key]
self[key] = default
return default
def pop(self, key, default=None):
return super().pop(self._normalize_key(key), default)
if key in self:
val = self[key]
del self[key]
return val
if default is not None:
return default
raise KeyError(key)
def keys(self):
return self._store.keys()
def values(self):
return self._store.values()
def items(self):
return self._store.items()
def __iter__(self):
return iter(self._store)
def __len__(self):
return len(self._store)
def __repr__(self):
return repr(self._store)
def to_dict(self):
return dict(self._store)
class UnifiedManager:
@@ -842,7 +882,7 @@ class UnifiedManager:
channel = normalize_channel(channel)
nodes = await self.load_nightly(channel, mode)
res = {}
res = NormalizedKeyDict()
added_cnr = set()
for v in nodes.values():
v = v[0]

View File

@@ -865,7 +865,7 @@ async def fetch_customnode_list(request):
channel = found
result = dict(channel=channel, node_packs=node_packs)
result = dict(channel=channel, node_packs=node_packs.to_dict())
return web.json_response(result, content_type='application/json')