Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
80f5019
chore: update MeshCore references folder name
Avi0n Jul 13, 2026
2d0cf83
feat(cli): add local radio command set
Avi0n Jul 13, 2026
5faf3e7
fix(contacts): fix ZephCore contact auto-removal
Avi0n Jul 13, 2026
a4ece5e
Update MARKETING_VERSION to 1.3.0
Avi0n Jul 13, 2026
5d8b5bb
Merge pull request #355 from bwees-forks/refactor/chat-window
bwees Jul 15, 2026
cf0986b
fix(remote-nodes): correct radio reboot warning
Avi0n Jul 14, 2026
8372b7b
Update .gitignore
Avi0n Jul 15, 2026
4199db1
fix(chats): keep the new-messages divider on open
Avi0n Jul 15, 2026
0087dde
feat(remote-nodes): show firmware version in contact info
Avi0n Jul 15, 2026
aacc46d
refactor(chats): add ChatTimelinePrimer
Avi0n Jul 15, 2026
7f10ca4
fix(chats): rebake a row recovered from an orphaned loading state
Avi0n Jul 15, 2026
dfa8134
ui(chats): show region in chat header, not type
Avi0n Jul 16, 2026
01736fc
feat(nodes): store primary GPS fix on node status snapshots
Avi0n Jul 8, 2026
2af1818
feat(nodes): map remote node GPS location and history
Avi0n Jul 10, 2026
a1f1ef0
feat(nodes): add location history report list with map callouts
Avi0n Jul 15, 2026
89b0dbd
fix(chats): make chat bars opaque before iOS 26
Avi0n Jul 16, 2026
64c66db
ui(chats): tighten sender name spacing
Avi0n Jul 16, 2026
8714492
fix(chats): open reopened chats at the divider
Avi0n Jul 16, 2026
126562c
test(chats): cover divider anchor under input bar
Avi0n Jul 16, 2026
992afaf
fix(chats): release the timeline writer when a chat closes
Avi0n Jul 16, 2026
29eb6db
fix(chats): bake the divider from the store's unread count
Avi0n Jul 16, 2026
4df2e4d
refactor(chats): introduce ChatTimeline as the per-conversation assem…
Avi0n Jul 16, 2026
03c6e95
refactor(contacts): make deleteContact cascade
Avi0n Jul 16, 2026
aa8f365
refactor(ble): extract ReconnectPolicy
Avi0n Jul 16, 2026
7e4db09
fix(contacts): handle late path discovery responses
Avi0n Jul 16, 2026
db58840
fix(contacts): resolve path discovery only for the matching contact
Avi0n Jul 16, 2026
371e3af
chore(l10n): remove unused localization keys
Avi0n Jul 16, 2026
d0261e2
feat(l10n): add Italian (it) localization
Avi0n Jul 16, 2026
acb0c00
chore(ci): pin swiftformat and disable new rules
Avi0n Jul 16, 2026
7f728a5
fix(meshcore): floor binary request timeouts
Avi0n Jul 17, 2026
eb20416
feat(meshcore): parse server time from login responses
Avi0n Jul 17, 2026
d8b4ed7
feat(remote-nodes): admin session reliability
Avi0n Jul 17, 2026
c96cc71
refactor(remote-nodes): share matchesSession via status helper
Avi0n Jul 17, 2026
8e58693
fix(discover): cancel-safe fetch queue and list perf
Avi0n Jul 17, 2026
94290eb
feat(backup): include discover list in backup
Avi0n Jul 17, 2026
7622412
test(chats): open the conversation before exercising loadOlderMessage…
Avi0n Jul 18, 2026
dfd0ae0
fix(rooms): order live room messages by timestamp
Avi0n Jul 20, 2026
fd10eab
fix(chats): own compose bar keyboard lift
Avi0n Jul 20, 2026
b71fcdd
fix: address SwiftFormat
Avi0n Jul 20, 2026
e140dca
Add Send Message to Nodes long-press context menu (#374)
hansimgamr Jul 20, 2026
a00841a
feat: Add contact profile pictures (#373)
hansimgamr Jul 20, 2026
d9e76ac
chore(l10n): localize contact avatar strings
Avi0n Jul 20, 2026
f8fb8cd
test(intents): clear last-connected for scope test
Avi0n Jul 20, 2026
439c463
Verified and ipdated Italian localization
Jul 20, 2026
95efafb
Merge pull request #376 from corradoignoti/it-translation
Avi0n Jul 20, 2026
79b957a
fix(ble): refresh data stream on session rebuild
Avi0n Jul 20, 2026
46cfc5c
fix(ble): preserve link on rebuild failure
Avi0n Jul 20, 2026
6e08aff
fix(chats): no late divider push on chat open
Avi0n Jul 20, 2026
0b4ee34
Update .gitignore
Avi0n Jul 20, 2026
10ec465
fix(chats): load view path offline
Avi0n Jul 20, 2026
851c4ec
chore: acknowledge MessagingUI and MapLibre
Avi0n Jul 20, 2026
01666c5
feat(chats): secretless hashtag channel URL joins
Avi0n Jul 20, 2026
b4b259c
Update TRANSLATIONS.md
Avi0n Jul 20, 2026
5529ebf
refactor(remote-nodes): remove TX power from radio settings
Avi0n Jul 21, 2026
f1a9022
feat(map): settings hub and discovered map pins
Avi0n Jul 21, 2026
136f274
fix(remote-nodes): in-exchange retransmit for multi-hop admin
Avi0n Jul 21, 2026
f01ebfd
fix(chats): stop list row prewarm during scroll
Avi0n Jul 21, 2026
fc8cccd
fix(contacts): multi-hop discover path wait
Avi0n Jul 21, 2026
b245dc5
ui(contacts): align discover path remaining under title
Avi0n Jul 21, 2026
3420d77
fix(lint): replace unused optional binding in binary drain
Avi0n Jul 21, 2026
8b25333
feat(whats-new): support cta and 1.3 notes
Avi0n Jul 23, 2026
3488cee
feat(support): show thank-you sheet after iap success
Avi0n Jul 23, 2026
e585b0d
feat(radio): add brazil community preset
Avi0n Jul 23, 2026
26282ee
fix(chats): tighten consecutive outgoing gaps
Avi0n Jul 23, 2026
a3d0d44
feat(map): add per-host map filter control
Avi0n Jul 24, 2026
4b9fef2
ui(whats-new): retitle maps note for filters
Avi0n Jul 24, 2026
03acb5a
feat(settings): add feedback contact screen
Avi0n Jul 24, 2026
76f0964
feat(whats-new): link full github release notes
Avi0n Jul 24, 2026
ec18cdf
test(ble): fix rebuild stream refresh gate
Avi0n Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
16 changes: 15 additions & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,25 @@ jobs:
- name: Install dependencies
run: command -v swiftlint >/dev/null 2>&1 || brew install swiftlint

- name: Install SwiftFormat
env:
SWIFTFORMAT_VERSION: 0.62.1
run: |
# Pinned rather than using the runner image's preinstalled build, so an
# image update cannot change the lint result without a commit here.
curl -sSL --fail -o /tmp/swiftformat.zip \
"https://github.com/nicklockwood/SwiftFormat/releases/download/${SWIFTFORMAT_VERSION}/swiftformat.zip"
unzip -o -q /tmp/swiftformat.zip -d /tmp/swiftformat-bin
chmod +x /tmp/swiftformat-bin/swiftformat
echo "/tmp/swiftformat-bin" >> "$GITHUB_PATH"

- name: Lint
run: swiftlint lint --strict

- name: Format
run: swiftformat --lint --strict .
run: |
swiftformat --version
swiftformat --lint --strict .

codegen:
name: Code Generation Checks
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@
.DS_Store

# MeshCore references
MeshCore-references/
mc-ref/

# AI
.claude
.agent*
.grok
.ignore
CLAUDE.md
AGENTS.md
CONTEXT.md
thoughts/
plans/
specs/
Expand Down
5 changes: 4 additions & 1 deletion .swiftformat
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
--swiftversion 6.2

# Match .swiftlint.yml exclusions
--exclude .build,.worktrees,build,tmp,MC1.xcodeproj,MC1/Resources/Generated,MeshCore/.build,MeshCore-references,MC1Services/.build,fastlane,scripts
--exclude .build,.worktrees,build,tmp,MC1.xcodeproj,MC1/Resources/Generated,MeshCore/.build,mc-ref,MC1Services/.build,fastlane,scripts

# Indentation — 2 spaces, no tabs
--indent 2
Expand Down Expand Up @@ -47,6 +47,9 @@
--disable trailingCommas # matches SwiftLint disabling trailing_comma
--disable wrapMultilineStatementBraces
--disable redundantSelf # bugged: https://github.com/nicklockwood/SwiftFormat/issues/1732
--disable wrapIfStatementBodies # single-line early returns and `if case` checks stay on one line
--disable wrapIfExpressionBodies # same, for if-expression branches
--disable redundantSwiftUIGroup # mis-parses Group(subviews:) into uncompilable code, and strips Groups whose modifiers must not reapply per-child

# Leave file headers untouched
--header ignore
2 changes: 1 addition & 1 deletion .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ excluded:
- MC1.xcodeproj
- MC1/Resources/Generated
- MeshCore/.build
- MeshCore-references
- mc-ref
- MC1Services/.build
- fastlane
- scripts
Expand Down
20 changes: 20 additions & 0 deletions MC1/Extensions/DiscoveredNodeDTO+ContactFrame.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import Foundation
import MC1Services

extension DiscoveredNodeDTO {
func makeContactFrame(lastModified: UInt32 = UInt32(Date().timeIntervalSince1970)) -> ContactFrame {
ContactFrame(
publicKey: publicKey,
type: nodeType,
typeRawValue: typeRawValue,
flags: 0,
outPathLength: outPathLength,
outPath: outPath,
name: name,
lastAdvertTimestamp: lastAdvertTimestamp,
latitude: latitude,
longitude: longitude,
lastModified: lastModified
)
}
}
8 changes: 8 additions & 0 deletions MC1/Extensions/DiscoveredNodeDTO+Coordinate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import CoreLocation
import MC1Services

extension DiscoveredNodeDTO {
var coordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
}
}
23 changes: 12 additions & 11 deletions MC1/Models/WhatsNew/WhatsNewCatalog.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,25 @@ import Foundation
enum WhatsNewCatalog {
static let releases: [WhatsNewRelease] = [
WhatsNewRelease(
version: WhatsNewVersion(major: 1, minor: 1),
version: WhatsNewVersion(major: 1, minor: 3),
items: [
WhatsNewItem(
symbol: "wand.and.rays",
title: L10n.WhatsNew.WhatsNew.SiriShortcuts.title,
description: L10n.WhatsNew.WhatsNew.SiriShortcuts.description
symbol: "bubble.left.and.bubble.right",
title: L10n.WhatsNew.WhatsNew.FasterChats.title,
description: L10n.WhatsNew.WhatsNew.FasterChats.description
),
WhatsNewItem(
symbol: "trash",
title: L10n.WhatsNew.WhatsNew.ClearMessages.title,
description: L10n.WhatsNew.WhatsNew.ClearMessages.description
symbol: "person.crop.circle.badge.plus",
title: L10n.WhatsNew.WhatsNew.ContactPhotos.title,
description: L10n.WhatsNew.WhatsNew.ContactPhotos.description
),
WhatsNewItem(
symbol: "antenna.radiowaves.left.and.right",
title: L10n.WhatsNew.WhatsNew.InboundHops.title,
description: L10n.WhatsNew.WhatsNew.InboundHops.description
symbol: "map",
title: L10n.WhatsNew.WhatsNew.MapFilters.title,
description: L10n.WhatsNew.WhatsNew.MapFilters.description
)
]
],
releaseNotesURL: URL(string: "https://github.com/Avi0n/MeshCoreOne/releases/tag/v1.3.0")!
)
]
}
1 change: 1 addition & 0 deletions MC1/Models/WhatsNew/WhatsNewRelease.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Foundation
struct WhatsNewRelease: Identifiable {
let version: WhatsNewVersion
let items: [WhatsNewItem]
let releaseNotesURL: URL

var id: WhatsNewVersion {
version
Expand Down
Loading
Loading