Skip to content

Commit 65d8cc6

Browse files
fix(device): parse abk runtime snake_case grouping fields
1 parent ee3bfbb commit 65d8cc6

2 files changed

Lines changed: 166 additions & 49 deletions

File tree

desktop/flutter_app/lib/src/core/models/device_models.dart

Lines changed: 158 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,16 @@ class AbkRuntimeStatus {
5151

5252
factory AbkRuntimeStatus.fromJson(Map<String, dynamic> json) {
5353
final managerRaw = _readMap(json['manager']);
54-
final backendRaw = _readMap(json['runtimeBackend']);
54+
final backendRaw = _readMapAlias(json, <String>[
55+
'runtimeBackend',
56+
'runtime_backend',
57+
]);
5558
final buildRaw = _readMap(json['build']);
5659
return AbkRuntimeStatus(
5760
schema: _readInt(json['schema'], fallback: 1),
58-
abkVersion: _readString(json['abkVersion']),
59-
abkCommit: _readString(json['abkCommit']),
60-
workMode: _readString(json['workMode']),
61+
abkVersion: _readStringAlias(json, <String>['abkVersion', 'abk_version']),
62+
abkCommit: _readStringAlias(json, <String>['abkCommit', 'abk_commit']),
63+
workMode: _readStringAlias(json, <String>['workMode', 'work_mode']),
6164
manager: managerRaw.isEmpty
6265
? null
6366
: AbkRuntimeManagerInfo.fromJson(managerRaw),
@@ -68,9 +71,10 @@ class AbkRuntimeStatus {
6871
modules: _readMapList(
6972
json['modules'],
7073
).map(AbkRuntimeModule.fromJson).toList(growable: false),
71-
extensionModules: _readMapList(
72-
json['extensionModules'],
73-
).map(AbkRuntimeModule.fromJson).toList(growable: false),
74+
extensionModules: _readMapListAlias(json, <String>[
75+
'extensionModules',
76+
'extension_modules',
77+
]).map(AbkRuntimeModule.fromJson).toList(growable: false),
7478
);
7579
}
7680
}
@@ -96,7 +100,10 @@ class AbkRuntimeManagerInfo {
96100

97101
factory AbkRuntimeManagerInfo.fromJson(Map<String, dynamic> json) {
98102
return AbkRuntimeManagerInfo(
99-
displayName: _readString(json['displayName']),
103+
displayName: _readStringAlias(json, <String>[
104+
'displayName',
105+
'display_name',
106+
]),
100107
variant: _readString(json['variant']),
101108
backend: _readString(json['backend']),
102109
version: _readString(json['version']),
@@ -138,17 +145,38 @@ class AbkRuntimeBuildInfo {
138145

139146
factory AbkRuntimeBuildInfo.fromJson(Map<String, dynamic> json) {
140147
return AbkRuntimeBuildInfo(
141-
androidVersion: _readString(json['androidVersion']),
142-
kernelVersion: _readString(json['kernelVersion']),
143-
subLevel: _readString(json['subLevel']),
144-
osPatchLevel: _readString(json['osPatchLevel']),
148+
androidVersion: _readStringAlias(json, <String>[
149+
'androidVersion',
150+
'android_version',
151+
]),
152+
kernelVersion: _readStringAlias(json, <String>[
153+
'kernelVersion',
154+
'kernel_version',
155+
]),
156+
subLevel: _readStringAlias(json, <String>['subLevel', 'sub_level']),
157+
osPatchLevel: _readStringAlias(json, <String>[
158+
'osPatchLevel',
159+
'os_patch_level',
160+
]),
145161
revision: _readString(json['revision']),
146-
kernelsuVariant: _readString(json['kernelsuVariant']),
147-
kernelsuBranch: _readString(json['kernelsuBranch']),
162+
kernelsuVariant: _readStringAlias(json, <String>[
163+
'kernelsuVariant',
164+
'kernelsu_variant',
165+
]),
166+
kernelsuBranch: _readStringAlias(json, <String>[
167+
'kernelsuBranch',
168+
'kernelsu_branch',
169+
]),
148170
version: _readString(json['version']),
149-
buildTime: _readString(json['buildTime']),
150-
virtualizationSupport: _readString(json['virtualizationSupport']),
151-
zramExtraAlgos: _readString(json['zramExtraAlgos']),
171+
buildTime: _readStringAlias(json, <String>['buildTime', 'build_time']),
172+
virtualizationSupport: _readStringAlias(json, <String>[
173+
'virtualizationSupport',
174+
'virtualization_support',
175+
]),
176+
zramExtraAlgos: _readStringAlias(json, <String>[
177+
'zramExtraAlgos',
178+
'zram_extra_algos',
179+
]),
152180
features: _readBoolMap(json['features']),
153181
);
154182
}
@@ -326,38 +354,80 @@ class AbkRuntimeModule {
326354
author: _readString(json['author']),
327355
type: _readString(json['type']),
328356
version: _readString(json['version']),
329-
versionCode: _readInt(json['versionCode']),
357+
versionCode: _readIntAlias(json, <String>['versionCode', 'version_code']),
330358
description: _readString(json['description']),
331-
repoUrl: _readString(json['repoUrl']),
359+
repoUrl: _readStringAlias(json, <String>['repoUrl', 'repo_url']),
332360
stage: _readString(json['stage']),
333-
entryKind: _readString(json['entryKind']),
361+
entryKind: _readStringAlias(json, <String>['entryKind', 'entry_kind']),
334362
source: _readString(json['source']),
335-
extensionId: _readString(json['extensionId']),
336-
companionPackage: _readString(json['companionPackage']),
337-
companionDisplayName: _readString(json['companionDisplayName']),
338-
companionAssetName: _readString(json['companionAssetName']),
339-
companionDownloadUrl: _readString(json['companionDownloadUrl']),
340-
serviceActivity: _readString(json['serviceActivity']),
341-
moduleDir: _readString(json['moduleDir']),
342-
webRoot: _readString(json['webRoot']),
363+
extensionId: _readStringAlias(json, <String>[
364+
'extensionId',
365+
'extension_id',
366+
]),
367+
companionPackage: _readStringAlias(json, <String>[
368+
'companionPackage',
369+
'companion_package',
370+
]),
371+
companionDisplayName: _readStringAlias(json, <String>[
372+
'companionDisplayName',
373+
'companion_display_name',
374+
]),
375+
companionAssetName: _readStringAlias(json, <String>[
376+
'companionAssetName',
377+
'companion_asset_name',
378+
]),
379+
companionDownloadUrl: _readStringAlias(json, <String>[
380+
'companionDownloadUrl',
381+
'companion_download_url',
382+
]),
383+
serviceActivity: _readStringAlias(json, <String>[
384+
'serviceActivity',
385+
'service_activity',
386+
]),
387+
moduleDir: _readStringAlias(json, <String>['moduleDir', 'module_dir']),
388+
webRoot: _readStringAlias(json, <String>['webRoot', 'web_root']),
343389
readonly: json['readonly'] == true,
344390
controllable: json['controllable'] == true,
345391
enabled: json['enabled'] != false,
346392
update: json['update'] == true,
347393
remove: json['remove'] == true,
348-
hasWebUi: json['hasWebUi'] == true,
349-
hasActionScript: json['hasActionScript'] == true,
350-
actionSupported: json['actionSupported'] == true,
351-
requiresCompanionApp: json['requiresCompanionApp'] == true,
352-
settingsSupported: json['settingsSupported'] == true,
353-
perAppSupported: json['perAppSupported'] == true,
354-
oobePriority: _readInt(json['oobePriority']),
355-
kpmArgs: _readString(json['kpmArgs']),
356-
groupId: _readString(json['groupId']),
357-
groupName: _readString(json['groupName']),
358-
groupRole: _readString(json['groupRole']),
359-
groupDescription: _readString(json['groupDescription']),
360-
groupRepoUrl: _readString(json['groupRepoUrl']),
394+
hasWebUi: _readBoolAlias(json, <String>['hasWebUi', 'has_web_ui']),
395+
hasActionScript: _readBoolAlias(json, <String>[
396+
'hasActionScript',
397+
'has_action_script',
398+
]),
399+
actionSupported: _readBoolAlias(json, <String>[
400+
'actionSupported',
401+
'action_supported',
402+
]),
403+
requiresCompanionApp: _readBoolAlias(json, <String>[
404+
'requiresCompanionApp',
405+
'requires_companion_app',
406+
]),
407+
settingsSupported: _readBoolAlias(json, <String>[
408+
'settingsSupported',
409+
'settings_supported',
410+
]),
411+
perAppSupported: _readBoolAlias(json, <String>[
412+
'perAppSupported',
413+
'per_app_supported',
414+
]),
415+
oobePriority: _readIntAlias(json, <String>[
416+
'oobePriority',
417+
'oobe_priority',
418+
]),
419+
kpmArgs: _readStringAlias(json, <String>['kpmArgs', 'kpm_args']),
420+
groupId: _readStringAlias(json, <String>['groupId', 'group_id']),
421+
groupName: _readStringAlias(json, <String>['groupName', 'group_name']),
422+
groupRole: _readStringAlias(json, <String>['groupRole', 'group_role']),
423+
groupDescription: _readStringAlias(json, <String>[
424+
'groupDescription',
425+
'group_description',
426+
]),
427+
groupRepoUrl: _readStringAlias(json, <String>[
428+
'groupRepoUrl',
429+
'group_repo_url',
430+
]),
361431
);
362432
}
363433
}
@@ -750,6 +820,53 @@ String readPrettyJson(Map<String, dynamic> json) {
750820
return const JsonEncoder.withIndent(' ').convert(json);
751821
}
752822

823+
dynamic _readAliasValue(Map<String, dynamic> json, List<String> keys) {
824+
for (final key in keys) {
825+
if (json.containsKey(key)) return json[key];
826+
}
827+
return null;
828+
}
829+
830+
String _readStringAlias(
831+
Map<String, dynamic> json,
832+
List<String> keys, {
833+
String fallback = '',
834+
}) {
835+
return _readString(_readAliasValue(json, keys), fallback: fallback);
836+
}
837+
838+
int _readIntAlias(
839+
Map<String, dynamic> json,
840+
List<String> keys, {
841+
int fallback = 0,
842+
}) {
843+
return _readInt(_readAliasValue(json, keys), fallback: fallback);
844+
}
845+
846+
bool _readBoolAlias(
847+
Map<String, dynamic> json,
848+
List<String> keys, {
849+
bool fallback = false,
850+
}) {
851+
final value = _readAliasValue(json, keys);
852+
if (value is bool) return value;
853+
return fallback;
854+
}
855+
856+
Map<String, dynamic> _readMapAlias(
857+
Map<String, dynamic> json,
858+
List<String> keys,
859+
) {
860+
return _readMap(_readAliasValue(json, keys));
861+
}
862+
863+
List<Map<String, dynamic>> _readMapListAlias(
864+
Map<String, dynamic> json,
865+
List<String> keys,
866+
) {
867+
return _readMapList(_readAliasValue(json, keys));
868+
}
869+
753870
String _readString(dynamic value, {String fallback = ''}) {
754871
if (value is String) return value;
755872
return fallback;

desktop/flutter_app/test/device_models_test.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ void main() {
88
'name': 'ABK ABI Bridge',
99
'type': 'builtin',
1010
'source': 'abk',
11-
'groupName': 'ABK Control Module',
12-
'groupId': 'abk-control',
13-
'groupRepoUrl':
11+
'group_name': 'ABK Control Module',
12+
'group_id': 'abk-control',
13+
'group_repo_url':
1414
'https://github.com/xingguangcuican6666/ABK_control_module',
1515
});
1616

@@ -25,8 +25,8 @@ void main() {
2525
'name': 'ABK ABI Bridge',
2626
'type': 'builtin',
2727
'source': 'abk',
28-
'entryKind': 'module_set',
29-
'repoUrl':
28+
'entry_kind': 'module_set',
29+
'repo_url':
3030
'https://github.com/xingguangcuican6666/ABK_ABI_PATCH_SUITE.git',
3131
});
3232

@@ -57,9 +57,9 @@ void main() {
5757
'name': 'Zygisk Next',
5858
'type': 'standard',
5959
'source': 'ksud',
60-
'groupName': 'Not an ABK set',
61-
'groupId': 'fake-group',
62-
'groupRepoUrl': 'https://example.com/not-abk',
60+
'group_name': 'Not an ABK set',
61+
'group_id': 'fake-group',
62+
'group_repo_url': 'https://example.com/not-abk',
6363
});
6464

6565
expect(module.isStandardRuntimeModule, isTrue);

0 commit comments

Comments
 (0)