feat: wire ShazamService into app and display results in alerts

feat/music-streaming
Laurent 1 month ago
parent 104fd64631
commit 6399eca302
  1. 25
      Music/ContentView.swift
  2. 2
      Music/MusicApp.swift

@ -7,6 +7,7 @@ struct ContentView: View {
var scanner: ScannerService var scanner: ScannerService
var audio: AudioService var audio: AudioService
var playlist: PlaylistViewModel var playlist: PlaylistViewModel
var shazam: ShazamService
@Binding var showNewPlaylistAlert: Bool @Binding var showNewPlaylistAlert: Bool
@State private var showRenameAlert = false @State private var showRenameAlert = false
@State private var playlistNameInput = "" @State private var playlistNameInput = ""
@ -21,7 +22,9 @@ struct ContentView: View {
if playlist.selectedPlaylist != nil { if playlist.selectedPlaylist != nil {
playlist.search(text) playlist.search(text)
} }
} },
isShazamListening: shazam.isListening,
onShazam: { shazam.isListening ? shazam.stopListening() : shazam.startListening() }
) )
if scanner.isScanning { if scanner.isScanning {
@ -155,6 +158,26 @@ struct ContentView: View {
playlistToRename = nil playlistToRename = nil
} }
} }
.alert("Song Identified", isPresented: Binding(
get: { shazam.matchedTitle != nil },
set: { if !$0 { shazam.clearResult() } }
)) {
Button("OK") { shazam.clearResult() }
} message: {
if let title = shazam.matchedTitle {
Text("\(title)\(shazam.matchedArtist ?? "Unknown Artist")")
}
}
.alert("Shazam Error", isPresented: Binding(
get: { shazam.errorMessage != nil },
set: { if !$0 { shazam.clearResult() } }
)) {
Button("OK") { shazam.clearResult() }
} message: {
if let error = shazam.errorMessage {
Text(error)
}
}
} }
private func handleDrop(_ providers: [NSItemProvider]) { private func handleDrop(_ providers: [NSItemProvider]) {

@ -7,6 +7,7 @@ struct MusicApp: App {
@State private var playerVM: PlayerViewModel? @State private var playerVM: PlayerViewModel?
@State private var scannerService: ScannerService? @State private var scannerService: ScannerService?
@State private var audioService = AudioService() @State private var audioService = AudioService()
@State private var shazamService = ShazamService()
@State private var playlistVM: PlaylistViewModel? @State private var playlistVM: PlaylistViewModel?
@State private var showNewPlaylistAlert = false @State private var showNewPlaylistAlert = false
@State private var initError: String? @State private var initError: String?
@ -25,6 +26,7 @@ struct MusicApp: App {
scanner: scanner, scanner: scanner,
audio: audioService, audio: audioService,
playlist: playlist, playlist: playlist,
shazam: shazamService,
showNewPlaylistAlert: $showNewPlaylistAlert showNewPlaylistAlert: $showNewPlaylistAlert
) )
} else if let error = initError { } else if let error = initError {

Loading…
Cancel
Save