Portfolio alignment + MainUiState refactor - #3
Merged
Conversation
Brings the Linux client in line with the rest of the TinkerNorth portfolio (dish-android, dish-mac, satellite) on tooling, CI, hook semantics, and data-flow shape, and ships a release pipeline. Tooling - .clang-format / .clang-tidy replaced with the canonical TinkerNorth rulesets (md5 matches dish-android + satellite verbatim). Source tree reformatted; ctest still 100% pass (29/29). - .githooks/pre-commit flipped from --dry-run --Werror to autofix-and- re-stage, matching the dish-mac and satellite hooks. CI (.github/workflows/linux-ci.yml) - clang-format pinned to 22.1.4 via pipx (was unpinned apt — Ubuntu 24.04's v18 disagreed with brew's v22 on braced-init lists). AppModel refactor — MainUiState - Replaces the slotsChanged / connectionsChanged / pairingTargetChanged trio with one canonical stateChanged() signal carrying a MainUiState slice (slotList, connections, pairingTarget). Mirrors dish-android's MainViewModel + dish-mac's @published shape so the three clients all expose state the same way. - MainWindow subscribes once and reads model->state().{slotList, connections, pairingTarget}. Pairing dialog flow now driven from state-change observation instead of a separate signal. - Field is named slotList not slots because Qt's moc reserves that token. Release pipeline (new .github/workflows/release.yml) - Tag-triggered (v*) build of release binary on ubuntu-22.04 (matches oldest LTS we want to support at runtime). - Packages as both .deb (for Debian/Ubuntu) and AppImage (for everyone else), uploaded to GitHub Releases. Documentation - CONTRIBUTING.md updated to reflect autofix hook semantics.
The Qt signal 'event' shadows QObject::event(QEvent*), which clang flags as -Wclang-diagnostic-overloaded-virtual. The repo's CMake config promotes that to a clang-tidy error via dish_strict's -Werror, so CI clang-tidy fails on every header that pulls in WifiConnectionManager. Renaming the signal to connectionEvent resolves the conflict without changing semantics — same payload (ConnectionEvent), same emit sites, same connect() target in AppModel.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
slotsChanged,connectionsChanged, andpairingTargetChangedinto a singlestateChanged()signal carrying a canonicalMainUiStateslice.MainWindownow subscribes once and readsmodel_->state().{slotList, connections, pairingTarget}— same shape asdish-android'sMainUiStateanddish-mac's@Publishedproperties. Field isslotList(notslots) because Qt's moc reserves that token..clang-format/.clang-tidyreplaced with the canonical TinkerNorth rulesets (md5-identical todish-androidandsatellite). Source tree reformatted; all 29 tests still pass..githooks/pre-commitflipped from--dry-run --Werrorto autofix-and-restage, matchingdish-macandsatellite.release.ymlbuilds onubuntu-22.04, packages as.deb+ AppImage on tag, uploads to GitHub Releases.CONTRIBUTING.mdupdated to reflect autofix hook.Test plan
cmake --build build-debugclean, no errorsctest --output-on-failure --parallel→ 29/29 passv*push and confirmrelease.ymlproduces.deb+ AppImageNote on the refactor
MainWindow::onStateChanged()now drives header rebuild, slot list rebuild, and pairing-prompt trigger off a single observation. The old per-signal connect calls have been collapsed accordingly.