Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
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
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,12 @@ public final class RoomSummary: Identifiable {
/// space filter bar.
public var parentSpaceIds: Set<String>

/// Whether this room currently has an ongoing MatrixRTC call.
///
/// Mirrors the SDK's `RoomInfo.hasRoomCall`, which is true whenever any
/// non-expired `m.call.member` state event exists in the room.
public var hasRoomCall: Bool

/// Creates a new ``RoomSummary`` instance.
///
/// - Parameters:
Expand Down Expand Up @@ -192,7 +198,8 @@ public final class RoomSummary: Identifiable {
inviterName: String? = nil,
inviterAvatarURL: String? = nil,
isSpace: Bool = false,
parentSpaceIds: Set<String> = []
parentSpaceIds: Set<String> = [],
hasRoomCall: Bool = false
) {
self.id = id
self.name = name
Expand All @@ -213,5 +220,6 @@ public final class RoomSummary: Identifiable {
self.inviterAvatarURL = inviterAvatarURL
self.isSpace = isSpace
self.parentSpaceIds = parentSpaceIds
self.hasRoomCall = hasRoomCall
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@ public protocol CallViewModelProtocol: AnyObject, Observable {
/// The identity of the local participant, set after connection.
var localParticipantID: String? { get }

/// Human-readable description of the current connection step. Only
/// non-nil while `state == .connecting`. The UI is expected to hide
/// transient phases (steps shorter than ~300ms) so the indicator
/// only surfaces during genuinely slow joins on poor networks.
var connectingPhase: String? { get }

/// A monotonically increasing counter that is bumped whenever video tracks change
/// (publish, unpublish, camera toggle, etc.). SwiftUI views should read this value
/// to ensure ``NSViewRepresentable`` bridges receive `updateNSView` calls when the
Expand Down
4 changes: 4 additions & 0 deletions Relay/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
<dict>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>CFBundleHelpBookFolder</key>
<string>Relay.help</string>
<key>CFBundleHelpBookName</key>
<string>app.subpop.Relay.help</string>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
Expand Down
30 changes: 30 additions & 0 deletions Relay/Resources/Relay.help/Contents/Info.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleIdentifier</key>
<string>app.subpop.Relay.help</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Relay Help</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>hbwr</string>
<key>HPDBookAccessPath</key>
<string>Relay.html</string>
<key>HPDBookIconPath</key>
<string>Shared/icon.png</string>
<key>HPDBookIndexPath</key>
<string>Relay.helpindex</string>
<key>HPDBookTitle</key>
<string>Relay Help</string>
<key>HPDBookType</key>
<string>3</string>
</dict>
</plist>
160 changes: 160 additions & 0 deletions Relay/Resources/Relay.help/Contents/Resources/Shared/relay-help.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
/* Apple Help Book styling for Relay. Apple Help Viewer renders
the page inside a fixed-width WebKit pane (~520pt); these styles
match the default macOS help look-and-feel. */

:root {
color-scheme: light dark;
--fg: #1d1d1f;
--fg-muted: #6e6e73;
--bg: #ffffff;
--rule: #d2d2d7;
--accent: #0066cc;
--code-bg: #f5f5f7;
}

@media (prefers-color-scheme: dark) {
:root {
--fg: #f5f5f7;
--fg-muted: #a1a1a6;
--bg: #1d1d1f;
--rule: #3a3a3c;
--accent: #2997ff;
--code-bg: #2c2c2e;
}
}

html, body {
margin: 0;
padding: 0;
background: var(--bg);
color: var(--fg);
font: 13px -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, sans-serif;
line-height: 1.5;
}

body {
padding: 24px 32px 48px 32px;
max-width: 640px;
}

h1, h2, h3 {
color: var(--fg);
font-weight: 600;
line-height: 1.25;
margin-top: 1.6em;
}

h1 {
font-size: 22px;
margin-top: 0;
}

h2 {
font-size: 16px;
border-bottom: 1px solid var(--rule);
padding-bottom: 4px;
}

h3 {
font-size: 14px;
}

p, ul, ol, table {
margin: 0.6em 0;
}

ul, ol {
padding-left: 24px;
}

li {
margin: 0.2em 0;
}

code, kbd {
font-family: ui-monospace, Menlo, monospace;
font-size: 0.95em;
background: var(--code-bg);
padding: 1px 5px;
border-radius: 4px;
}

pre {
background: var(--code-bg);
border: 1px solid var(--rule);
border-radius: 6px;
padding: 10px 12px;
overflow-x: auto;
font-family: ui-monospace, Menlo, monospace;
font-size: 0.95em;
line-height: 1.45;
}

pre code {
background: none;
padding: 0;
}

a {
color: var(--accent);
text-decoration: none;
}

a:hover {
text-decoration: underline;
}

table {
border-collapse: collapse;
width: 100%;
margin: 0.8em 0;
}

th, td {
border: 1px solid var(--rule);
padding: 6px 10px;
text-align: left;
vertical-align: top;
}

th {
background: var(--code-bg);
font-weight: 600;
}

.callout {
background: var(--code-bg);
border-left: 3px solid var(--accent);
padding: 8px 12px;
margin: 1em 0;
border-radius: 4px;
}

.muted {
color: var(--fg-muted);
}

nav.topic-list {
list-style: none;
padding: 0;
}

nav.topic-list li {
border-bottom: 1px solid var(--rule);
padding: 10px 0;
}

nav.topic-list li:last-child {
border-bottom: none;
}

nav.topic-list a {
display: block;
font-weight: 500;
}

nav.topic-list .subtitle {
color: var(--fg-muted);
font-weight: 400;
margin-top: 2px;
}
31 changes: 31 additions & 0 deletions Relay/Resources/Relay.help/Contents/Resources/en.lproj/Relay.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="AppleTitle" content="Relay Help">
<meta name="AppleIcon" content="../Shared/icon.png">
<meta name="robots" content="anchors">
<meta name="description" content="Help for Relay, a native macOS Matrix client.">
<meta name="keywords" content="Relay, Matrix, help, chat, calls">
<link rel="stylesheet" href="../Shared/relay-help.css">
<title>Relay Help</title>
</head>
<body>
<h1>Relay Help</h1>

<p>Relay is a native macOS client for the <a href="https://matrix.org">Matrix</a> chat network. This help book collects troubleshooting guides and notes that go beyond what fits inline in the app.</p>

<h2>Topics</h2>
<nav>
<ul class="topic-list">
<li>
<a href="pages/troubleshooting-calls.html">Troubleshooting MatrixRTC calls</a>
<div class="subtitle">What to capture and share when an audio or video call fails to connect or shows no media.</div>
</li>
</ul>
</nav>

<h2>Getting more help</h2>
<p>If a topic in this help book doesn't cover your problem, file an issue at <a href="https://github.com/subpop/Relay/issues">github.com/subpop/Relay/issues</a> or join the conversation in <a href="https://matrix.to/#/#relayapp:matrix.org">#relayapp:matrix.org</a>.</p>
</body>
</html>
Loading
Loading