Skip to content

Commit d022acb

Browse files
committed
chore: refresh fdnext and controller group settings
1 parent 9af4a46 commit d022acb

7 files changed

Lines changed: 21 additions & 9 deletions

File tree

CHANGELOG-zh.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ FlashMaster by PeratX <peratx@itxtech.org>
22
版权所有 (c) 2019-2026 iTX Technologies
33
===================================
44
版本 2.1.1
5+
- 更新内嵌 fdnext 到 v2.2.0(90b91d6),刷新 NAND Flash ID process 查询与控制器资源,提升解码/搜索匹配覆盖。
56
- 更新内嵌 fdnext 到 v2.2.0(7726513),新增 Micron HBM/HMC 与更完整的 Micron DRAM PNS decodepack 覆盖,依据官方文档扩展 SpecTek DRAM/mobile/managed memory 规则,隐藏内部 decodepack code 字段,并随统一 prefix crawler 刷新 MDB/FDB 搜索资源。
67
- 更新内嵌 fdnext 到 v2.2.0(41422c3),清理生成的 FDB 数据,移除歧义别名、占位变体、泛化标签、合成 key、仅控制器料号和低置信 Flash ID,同时保留可信支持列表料号。
78
- 优化 fdnext 控制器分组投影,decode/search 的 controllerGroup 筛选现在使用更新后的分组定义与本地化 capabilities 元数据。

CHANGELOG.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ FlashMaster by PeratX <peratx@itxtech.org>
22
Copyright (c) 2019-2026 iTX Technologies
33
===================================
44
Version 2.1.1
5+
- Updated embedded fdnext to v2.2.0 (90b91d6), refreshing NAND Flash ID process lookups and controller resources for more complete decode/search matching.
56
- Updated embedded fdnext to v2.2.0 (7726513), adding Micron HBM/HMC and expanded Micron DRAM PNS decodepack coverage, broadening SpecTek DRAM/mobile/managed memory rules from official documentation, hiding internal decodepack code fields, and refreshing MDB/FDB search resources around the unified prefix crawler.
67
- Updated embedded fdnext to v2.2.0 (41422c3), cleaning generated FDB data by dropping ambiguous aliases, placeholder variants, generic labels, synthetic keys, controller-only parts, and low-confidence Flash IDs while preserving trusted support part numbers.
78
- Refined fdnext controller group projections so decode/search controller filtering uses the updated group definitions and localized capability metadata.

src/lang/chs.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ export default {
7575
website: '网站',
7676
controllers: '控制器',
7777
controllerInventory: '控制器清单',
78-
controllerGroupNote: '分组名称、说明和顺序来自 fdnext capabilities。',
7978
selectedControllerGroups: '当前控制器分组',
8079
defaultControllerGroups: '默认控制器分组',
8180
flashIds: 'Flash ID',

src/lang/eng.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ export default {
7575
website: 'Website',
7676
controllers: 'Controllers',
7777
controllerInventory: 'Controller Inventory',
78-
controllerGroupNote: 'Group names, descriptions, and order come from fdnext capabilities.',
7978
selectedControllerGroups: 'Active Controller Groups',
8079
defaultControllerGroups: 'Default Controller Groups',
8180
flashIds: 'Flash IDs',

src/services/capabilityHtml.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@ function formatControllerInventory(controllers, t, expandedCapabilityGroups) {
199199
return `
200200
<section class="capability-card">
201201
<div class="capability-card-title">${escapeHtml(t('settings.capabilityInfo.controllerInventory'))}</div>
202-
<div class="capability-card-note">${escapeHtml(t('settings.capabilityInfo.controllerGroupNote'))}</div>
203202
${formatControllerDefaults(controllers, t)}
204203
${body}
205204
</section>

src/views/Settings.vue

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@
5353
</div>
5454
<div class="panel-body query-stack">
5555
<v-select
56-
v-model="controllerGroups"
56+
:model-value="controllerGroups"
5757
:items="controllerGroupItems"
5858
item-title="title"
5959
item-value="value"
6060
multiple
6161
chips
62-
closable-chips
62+
:closable-chips="canRemoveControllerGroups"
6363
hide-details
6464
:loading="loadingControllerGroups"
6565
:label="$t('settings.activeControllerGroups')"
@@ -79,6 +79,7 @@
7979
class="controller-group-option-checkbox"
8080
color="primary"
8181
density="compact"
82+
:disabled="isLastSelectedControllerGroup(item.raw.value)"
8283
:model-value="isControllerGroupSelected(item.raw.value)"
8384
:ripple="false"
8485
tabindex="-1"
@@ -248,6 +249,7 @@ const serverItems = computed(() => store.getServerPresets().map(item => ({
248249
const isHttpParser = computed(() => parserMode.value === store.PARSER_HTTP);
249250
const infoButtonLabel = computed(() => isHttpParser.value ? t('settings.serverInfo') : t('settings.parserInfo'));
250251
const infoDialogTitle = computed(() => infoButtonLabel.value);
252+
const canRemoveControllerGroups = computed(() => controllerGroups.value.length > 1);
251253
252254
const stats = computed(() => [
253255
{ label: t('nav.decodePartNumber'), value: statsState.value.decodeId },
@@ -297,7 +299,10 @@ function normalizeControllerGroupSelection(value) {
297299
const selected = (Array.isArray(value) ? value : [value])
298300
.map(item => String(item || '').trim())
299301
.filter(Boolean);
300-
const previous = controllerGroups.value;
302+
const previous = controllerGroups.value.length ? controllerGroups.value : [store.CONTROLLER_GROUP_ALL];
303+
if (!selected.length) {
304+
return previous;
305+
}
301306
const exclusive = selected.filter(item => exclusiveControllerGroups.has(item));
302307
const newlySelectedExclusive = exclusive.find(item => !previous.includes(item));
303308
if (newlySelectedExclusive) {
@@ -306,13 +311,18 @@ function normalizeControllerGroupSelection(value) {
306311
if (exclusive.length && selected.some(item => !exclusiveControllerGroups.has(item))) {
307312
return selected.filter(item => !exclusiveControllerGroups.has(item));
308313
}
309-
return selected.length ? selected : [store.CONTROLLER_GROUP_ALL];
314+
return selected;
310315
}
311316
312317
function isControllerGroupSelected(value) {
313318
return controllerGroups.value.includes(String(value || ''));
314319
}
315320
321+
function isLastSelectedControllerGroup(value) {
322+
const group = String(value || '').trim();
323+
return Boolean(group) && controllerGroups.value.length === 1 && controllerGroups.value[0] === group;
324+
}
325+
316326
function applyControllerGroups(value) {
317327
store.setControllerGroups(value);
318328
controllerGroups.value = store.getControllerGroups();
@@ -326,6 +336,7 @@ function changeControllerGroups(value) {
326336
function toggleControllerGroup(value) {
327337
const group = String(value || '').trim();
328338
if (!group) return;
339+
if (isLastSelectedControllerGroup(group)) return;
329340
if (exclusiveControllerGroups.has(group)) {
330341
applyControllerGroups([group]);
331342
return;
@@ -334,7 +345,9 @@ function toggleControllerGroup(value) {
334345
const next = withoutExclusive.includes(group)
335346
? withoutExclusive.filter(item => item !== group)
336347
: [...withoutExclusive, group];
337-
applyControllerGroups(next.length ? next : [store.CONTROLLER_GROUP_ALL]);
348+
if (next.length) {
349+
applyControllerGroups(next);
350+
}
338351
}
339352
340353
function changeTheme(value) {

0 commit comments

Comments
 (0)