From de0b8e59722a0a43fb23c5959281b829b9908684 Mon Sep 17 00:00:00 2001 From: diyaa Date: Mon, 14 Sep 2026 22:43:18 +0200 Subject: [PATCH] Add Suno field copy fallback --- .../Presentation/FinalReviewView.swift | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/Sources/MusicAssistantApp/Presentation/FinalReviewView.swift b/Sources/MusicAssistantApp/Presentation/FinalReviewView.swift index 2c9b794..6e40836 100644 --- a/Sources/MusicAssistantApp/Presentation/FinalReviewView.swift +++ b/Sources/MusicAssistantApp/Presentation/FinalReviewView.swift @@ -1,3 +1,4 @@ +import AppKit import MusicAssistantCore import SwiftUI @@ -65,6 +66,17 @@ struct FinalReviewView: View { .foregroundStyle(handoffStatus.foregroundStyle) } + if let fieldsToCopy, let output = project.sunoOutput { + HStack(spacing: 8) { + ForEach(fieldsToCopy) { field in + Button("Copy \(field.displayName)") { + copy(field, from: output) + } + .buttonStyle(.bordered) + } + } + } + TextField("Suno lyrics", text: sunoLyricsBinding, axis: .vertical) .lineLimit(4...10) TextField("Suno style prompt", text: sunoStylePromptBinding, axis: .vertical) @@ -220,6 +232,30 @@ struct FinalReviewView: View { } } } + + private var fieldsToCopy: [SunoHandoffField]? { + guard case let .fieldFill(report) = handoffStatus else { return nil } + let fields = SunoHandoffField.allCases.filter { + if case .copyRequired = report.results[$0] { return true } + return false + } + return fields.isEmpty ? nil : fields + } + + private func copy(_ field: SunoHandoffField, from output: SunoOutput) { + let value: String + switch field { + case .title: + value = project.title + case .lyrics: + value = output.lyricsText + case .stylePrompt: + value = output.stylePrompt + } + + NSPasteboard.general.clearContents() + NSPasteboard.general.setString(value, forType: .string) + } } private enum HandoffStatus: Equatable {