Skip to content

feat(devices): device list updates from the APRS Foundation (F4.16) - #356

Merged
gx1400 merged 1 commit into
mainfrom
feat/f4.16-device-list
Oct 21, 2026
Merged

gx1400 merged 1 commit into
mainfrom
feat/f4.16-device-list

Conversation

@gx1400

@gx1400 gx1400 commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

Stacked on #354. Closes #355. Spec: docs/features/F4.16-device-list.md. The decisions were agreed 2026-10-19; what this build settled is under Built in the spec.

Engine (Engine.DeviceList.cs)

  • On start, the engine loads the kept tocalls.json if it reads and is newer than APRS.NET's built-in list. Otherwise it deletes the file and uses the built-in list.

  • Schedule: the first check is 3 minutes after start, or one interval after the last check if that's later. Then it checks weekly by default (or daily, or never). The engine checks nothing while the Internet switch is off or the address is empty.

  • Update now runs a check at once.

  • A check sends the kept copy's ETag with AprsDeviceListSource. If the server has a newer list that reads:

    • it's written as published (to a temporary file, then moved into place);
    • it's used at once;
    • StationStore.UseDeviceList names every station already heard again.

    Otherwise the check reports devicelist.not-newer, unreadable, unexpected-answer or unreachable.

  • The last-check time and the ETag are kept with the settings. A client's save never overwrites them, and only the desktop may change the address.

  • Options: Engine:DeviceList:Url (empty turns downloading off), Folder (defaults to deviceid in the data folder) and Timeout. The desktop sets UrlIsSetting.

  • The new devicelist HTTP client sends the same User-Agent as address lookup.

  • EngineStatus.DeviceList, GetDeviceListAsync (everyone) and UpdateDeviceListAsync (operator-only on a gateway) are added, through the hub and the remote client.

UI

  • Settings › Data › Device list shows:
    • which list is in use, from what date;
    • the last check and its result, in the warning colour if it failed;
    • Update now and Check automatically (Weekly/Daily/Off), for whoever may change the station;
    • an Advanced expander on the desktop for the address, with Save and Reset to the default;
    • the list's credit.
  • About credits the list (OH7LZB and contributors, CC BY-SA 2.0), links to it, and says which list is in use.

Tests

  • Core (DeviceListTests):
    • the built-in list by default;
    • a newer list is kept as published and used, and a station already heard is named at once;
    • the second check sends If-None-Match and gets a 304;
    • not-newer, unreadable JSON and an unknown device class are thrown away with their reasons;
    • a 404 and an unreachable server;
    • a kept list is loaded on start, and an older one is deleted;
    • the schedule over 7 days: weekly checks 2 times, daily 8, off never, and nothing with the Internet off;
    • an empty address never downloads.
  • Gateway: a viewer sees the list but is refused Update now. A browser save keeps the schedule but can't change the address.
  • UI: the texts, Update now, saving the schedule, viewer vs operator, no address, and address validation, empty and reset.
  • Release build, then 563 Core, 653 UI, 172 Gateway and 17 Tiles tests: all pass. The user's data folder isn't touched.

Base automatically changed from feat/f1.34-about-components to feat/f4.17-sbom October 21, 2026 17:45
@gx1400
gx1400 force-pushed the feat/f4.16-device-list branch from 92aaa8f to 8005686 Compare October 21, 2026 17:47
Base automatically changed from feat/f4.17-sbom to main October 21, 2026 17:54
The engine checks the aprs-deviceid list weekly (or daily, or never) and on
Update now, with APRS.NET's AprsDeviceListSource and the kept copy's ETag,
never while the Internet switch is off. A newer list that reads is kept as
published, used at once, and every station heard is identified again; on
start a kept list older than the built-in one is deleted. Settings › Data
shows the list in use, the last check, Update now, the schedule and, on the
desktop, the address; About credits the list. On a gateway Update now is the
operator's and the address is the environment's.

Closes #355
@gx1400
gx1400 force-pushed the feat/f4.16-device-list branch from 8005686 to 87980fe Compare October 21, 2026 17:56
@gx1400
gx1400 merged commit 6dbe074 into main Oct 21, 2026
11 checks passed
@gx1400
gx1400 deleted the feat/f4.16-device-list branch October 21, 2026 18:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

F4.16 Device list updates

1 participant