Skip to content

Commit f9ee5a2

Browse files
chore: merge main (feat/multi-source music support) into production-polish
Resolves conflicts from PR #13 landing in main. Kept HEAD versions for AppDelegate extension architecture, thread-safe AppleMusicSource tracking lock, and richer FEATURE_IDEAS content; accepted origin/main additions for systemNowPlaying queue key, Last.fm/Multi-Platform feature ideas, and new PlaybackSourceManagerTests test. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 parents dddd6fd + ac6daf9 commit f9ee5a2

5 files changed

Lines changed: 33 additions & 6 deletions

File tree

FEATURE_IDEAS.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,16 @@ Ship multiple pre-built WebSocket overlay themes (minimal, retro, neon, glassmor
5353
Global keyboard shortcuts to toggle tracking, skip song, or show/hide the overlay — even when WolfWave is in the background. Configurable in Settings → Advanced.
5454

5555
**Complexity**: Low–Medium
56-
**Approach**: `CGEvent` tap or a lightweight hotkey library (e.g. HotKey by github/soffes)
56+
**Approach**: `CGEvent` tap or a lightweight hotkey library (e.g. HotKey by GitHub/soffes)
57+
58+
---
59+
60+
## Last.fm Scrobbling
61+
62+
Optional Last.fm integration to automatically scrobble tracks as they play. Uses Last.fm API with OAuth device flow (same pattern as Twitch auth).
63+
64+
**Complexity**: Medium
65+
**Builds on**: `TwitchDeviceAuth` OAuth pattern, `KeychainService`
5766

5867
---
5968

@@ -109,3 +118,11 @@ Let Twitch chat vote on the next song from the request queue. Streamer posts the
109118
**Complexity**: Medium
110119
**Builds on**: Song Request Queue feature, existing `TwitchChatService`
111120

121+
---
122+
123+
## Multi-Platform Chat Support
124+
125+
Extend the bot beyond Twitch to YouTube Live chat and Kick. Same `BotCommand` protocol, different transport layer per platform.
126+
127+
**Complexity**: High
128+
**Builds on**: `BotCommand` protocol, `BotCommandDispatcher`

apps/native/WolfWaveTests/MusicPlaybackMonitorTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// MusicPlaybackMonitorTests.swift
2+
// AppleMusicSourceTests.swift
33
// WolfWaveTests
44
//
55
// Created by MrDemonWolf, Inc. on 2/27/26.

apps/native/WolfWaveTests/PlaybackSourceManagerTests.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ final class PlaybackSourceManagerTests: XCTestCase {
1414
XCTAssertEqual(manager.currentMode, .appleMusic)
1515
}
1616

17+
func testInvalidPersistedModeFallsBackToAppleMusic() {
18+
UserDefaults.standard.set("invalidMode", forKey: "playbackSourceMode")
19+
let manager = PlaybackSourceManager()
20+
XCTAssertEqual(manager.currentMode, .appleMusic)
21+
}
22+
23+
// MARK: - Mode Switching
24+
25+
1726
// MARK: - Delegate Forwarding
1827

1928
func testDelegateReceivesTrackUpdate() {

apps/native/wolfwave/Core/AppConstants.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,7 @@ enum AppConstants {
391391
/// Queue for WebSocket server operations
392392
static let websocketServer = "com.mrdemonwolf.wolfwave.websocketserver"
393393

394+
static let systemNowPlaying = "com.mrdemonwolf.wolfwave.systemnowplaying"
394395
}
395396

396397
// MARK: - UI Dimensions

apps/native/wolfwave/Views/Shared/WhatsNewView.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ struct WhatsNewView: View {
2323
private let features: [(icon: String, iconColor: Color, title: String, description: String)] = [
2424
("music.note.2", .pink, "Discord Buttons", "Open in Apple Music or jump to song.link from your Discord status"),
2525
("arrow.up.right.circle", .blue, "Launch at Login", "WolfWave starts automatically when your Mac does"),
26-
("sparkle", twitchPurple, "Homebrew Auto-Update", "Homebrew updates arrive automatically"),
27-
("rectangle.and.arrow.up.right.and.arrow.down.left", .green, "Polished Installer", "New drag-and-drop installer with WolfWave branding"),
28-
("paintbrush", discordIndigo, "Artwork & Links", "Album art and shareable song links added to every track"),
29-
("checkmark.shield", .orange, "Stability", "Faster reconnections, smoother updates, and better security")
26+
("sparkle", twitchPurple, "Homebrew Auto-Update", "Homebrew tap stays in sync whenever a new release ships"),
27+
("rectangle.and.arrow.up.right.and.arrow.down.left", .green, "Custom DMG", "Polished installer background with WolfWave branding"),
28+
("paintbrush", discordIndigo, "Artwork & Links", "Album art and song.link resolved automatically for every track"),
29+
("checkmark.shield", .orange, "Stability", "Tighter entitlements, fixed Sparkle updates, and smarter reconnects")
3030
]
3131

3232
// MARK: - Body

0 commit comments

Comments
 (0)