Skip to content

feat(stations): station lists, to show only an event's volunteers or the spotters you work with (F1.33) - #388

Merged
gx1400 merged 2 commits into
mainfrom
feat/f1.33-station-lists
Oct 26, 2026
Merged

gx1400 merged 2 commits into
mainfrom
feat/f1.33-station-lists

Conversation

@gx1400

@gx1400 gx1400 commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Closes #328. Stacked on #387 (the history file).

Built to the F1.33 spec. Decisions 1 and 2 are yours (lists per profile; plain text in and out); the rest are proposed.

Contracts

  • StationList(Id, Name, Text) keeps the text as typed, so headings and blank lines survive a copy out and back in (behavior 3). Its Entries are read from the text.

  • StationListEntry matches:

    • a callsign with its SSID;
    • a callsign without an SSID, which means every SSID;
    • a prefix and *;
    • an object or item name.

    Case doesn't matter.

  • StationListText.Parse and Append are shared by the desktop, the browser and the engine. Parse returns errors by line number.

  • StationProfile.StationLists, and StationFilter.Lists (list ids).

  • Error codes settings.station-list.entry-invalid (with the line), .too-many (20 lists, 500 entries) and .name-taken.

Engine

  • Validation of names, lines and limits.
  • The View filter's list condition: the store asks the engine for a name test, which is cached until the settings change, so a list is parsed once per change rather than once per station. A list that no longer exists is ignored instead of hiding everything. Emergencies always show.
  • APRS-IS filter: a list in a viewer's View filter adds a b/ part (callsigns and prefixes, with a callsign without an SSID as CALL*) and an o/ part (names). The filter is re-sent as viewers start and stop showing it. At most 100 entries go in (StationList.MaxFilterEntries), and Settings says when a list has more.

UI

  • Settings › Station lists (screenshot sent): the lists, and an editor with name, a plain-text entry box, and bad lines pointed out by number as you type. Save stays disabled until they're fixed. It has Copy list, Paste, Delete, and Copy to profile, which replaces a list of the same name there. Shown to whoever may change settings, as on the gateway (F2.9). It re-words itself on a language change.
  • The View filter gets "Only stations in" with the profile's lists. The map chip names the lists shown: "Spotters · 3 of 120 · emergencies always shown".
  • Details shows "In Spotters: Sweep 2" and offers Add to list. The map's right-click on a station offers Add N0CALL to list. A station already in the list isn't added twice.

Tests

  • Core StationListTests (12): parsing with headings, notes and a bad line; matching rules; only the list shown, except an emergency; the b//o/ filter parts added and removed with the viewer; validation.
  • UI StationListsUiTests (3): the editor; the View filter and chip; Add to list.
  • SettingsKeyboardTests walks one more section, and the language sweep covers the new section.
  • The full Release build and test suite pass.

@gx1400
gx1400 force-pushed the feat/f1.33-station-lists branch from 3359dd8 to 071d6a9 Compare October 26, 2026 05:27
@gx1400
gx1400 added this pull request to stack #395 October 26, 2026 10:17
@gx1400
gx1400 force-pushed the feat/f1.33-station-lists branch from 1661823 to 0b05252 Compare October 26, 2026 10:18
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Package report

Vulnerable packages

No known vulnerabilities in direct or transitive packages.

Available package updates

Package Current version Available version Note
xunit.runner.visualstudio 3.1.5 4.0.1 Pinned in AprsMap.UI.Tests (see below)
xunit.v3.mtp-off 3.2.2 4.0.2 Pinned in AprsMap.UI.Tests (see below)

Pinned versions

These projects override the central version in Directory.Packages.props on purpose; updates for them are held back until the reason no longer applies.

Package Pinned version Project Reason
xunit.runner.visualstudio 3.1.5 AprsMap.UI.Tests Avalonia.Headless.XUnit 12.1 is built against xUnit v3 3.x and fails test discovery under 4.x (missing TestIntrospectionHelper overload). Pin this project only until Avalonia supports v4; see dependabot.yml.
xunit.v3.mtp-off 3.2.2 AprsMap.UI.Tests Avalonia.Headless.XUnit 12.1 is built against xUnit v3 3.x and fails test discovery under 4.x (missing TestIntrospectionHelper overload). Pin this project only until Avalonia supports v4; see dependabot.yml.

Checked at a030725 against nuget.org.

Base automatically changed from feat/history-file to main October 26, 2026 12:43
…the spotters you work with (F1.33)

Each profile gets named lists of callsigns, prefixes and object names,
edited as plain text with Copy list, Paste and Copy to profile; bad lines
are pointed out by number. The View filter's "Only stations in" shows
only the lists ticked (emergencies always show), the map's chip names
them, and a list shown joins the APRS-IS filter as b/ and o/ parts so its
stations are received wherever they are. Add to list from Details and
the map's right-click.
The release with the digipeater path rules, gating messages from APRS-IS
to RF with the list of stations heard on RF, one connection for every port
of a multi-port TNC, and hop counting, for 0.7.0's digipeater and two-way
IGate. No API changes needed here.
@gx1400
gx1400 force-pushed the feat/f1.33-station-lists branch from 0b05252 to c5d725c Compare October 26, 2026 12:43
@gx1400
gx1400 merged commit d070994 into main Oct 26, 2026
12 checks passed
@gx1400
gx1400 deleted the feat/f1.33-station-lists branch October 26, 2026 13:05
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.

F1.33 Station lists: show only a list of callsigns and objects

1 participant