Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion data/upstream/iodeos.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# yaml-language-server: $schema=../../schema/upstream.json
# Generated by npm run import. Edits get overwritten, fix it at the source link instead.
imported: 2026-10-17
imported: 2026-10-19
devices:
braxtech/brax3:
status: active
Expand Down Expand Up @@ -320,6 +320,7 @@ devices:
features:
volte: { status: broken, note: iodéOS lists VoLTE and VoWiFi as not working here }
vowifi: { status: broken, note: iodéOS lists VoLTE and VoWiFi as not working here }
5g: { status: broken, note: iodéOS lists 5G as not working here }
samsung/crownlte:
status: active
android: 13
Expand Down
9 changes: 8 additions & 1 deletion scripts/import/sources/iodeos.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ function callFeatures(answer, name) {
return { volte: broken(), vowifi: broken() };
}

/** A no on a phone without 5G is missing hardware, so only one with 5G in its name gets broken */
function fiveGFeatures(answer, name) {
if (answer === 'yes') return { '5g': 'working' };
if (answer !== 'no' || !/\b5G\b/i.test(name)) return {};
return { '5g': { status: 'broken', note: 'iodéOS lists 5G as not working here' } };
}

/** One entry per device row in iodéOS's TablePress table, GSIs left out */
export function parseTable(html) {
const table = html.match(/<table id="tablepress-1"[\s\S]*?<\/table>/)[0];
Expand All @@ -69,7 +76,7 @@ export function parseTable(html) {
const major = cell('version').match(/^\d+/)?.[0];
const features = {
...callFeatures(cell('calls').toLowerCase(), fullName),
...(cell('fiveG').toLowerCase() === 'yes' && { '5g': 'working' }),
...fiveGFeatures(cell('fiveG').toLowerCase(), fullName),
};

return [
Expand Down
9 changes: 7 additions & 2 deletions tests/import/iodeos.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,17 @@ test('variants on separate lines become aliases and codenames are lowercased', (
assert.deepEqual(device.aliases, ['XT2233-1', 'XT2233-2']);
});

test('calls marked no are broken with a note, and 5G marked no is left out', () => {
test('calls marked no are broken with a note', () => {
const { row } = entry('beyondx');
assert.equal(row.relock, 'no');
assert.equal(row.features.volte.status, 'broken');
assert.ok(row.features.vowifi.note);
assert.equal(row.features['5g'], undefined);
});

test('5G marked no is broken on a phone named 5G, and left out on the rest', () => {
assert.equal(entry('beyondx').row.features['5g'].status, 'broken');
assert.ok(entry('beyondx').row.features['5g'].note);
assert.equal(entry('a5y17lte').row.features['5g'], undefined);
});

test('wifi-only tablets get no call features at all', () => {
Expand Down
Loading