diff --git a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewLogger.swift b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewLogger.swift index e0d32ee..4a70dc4 100644 --- a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewLogger.swift +++ b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewLogger.swift @@ -62,8 +62,18 @@ fileprivate struct SettingsSection: View { struct SettingsViewLogger: View { @State private var logs: String = "" @State private var isLoading: Bool = true + @State private var showFullLogs: Bool = false @StateObject private var filterViewModel = LogFilterViewModel.shared + private let displayCharacterLimit = 50_000 + + var displayedLogs: String { + if showFullLogs || logs.count <= displayCharacterLimit { + return logs + } + return String(logs.suffix(displayCharacterLimit)) + } + var body: some View { ScrollView { VStack(spacing: 24) { @@ -79,13 +89,26 @@ struct SettingsViewLogger: View { .frame(maxWidth: .infinity, alignment: .center) .padding(.vertical, 20) } else { - Text(logs) - .font(.footnote) - .foregroundColor(.secondary) - .frame(maxWidth: .infinity, alignment: .leading) - .padding(.horizontal, 16) - .padding(.vertical, 12) - .textSelection(.enabled) + VStack(alignment: .leading, spacing: 8) { + Text(displayedLogs) + .font(.footnote) + .foregroundColor(.secondary) + .frame(maxWidth: .infinity, alignment: .leading) + .textSelection(.enabled) + + if logs.count > displayCharacterLimit && !showFullLogs { + Button(action: { + showFullLogs = true + }) { + Text("Show More (\(logs.count - displayCharacterLimit) more characters)") + .font(.footnote) + .foregroundColor(.accentColor) + } + .padding(.top, 8) + } + } + .padding(.horizontal, 16) + .padding(.vertical, 12) } } } @@ -139,6 +162,7 @@ struct SettingsViewLogger: View { await Logger.shared.clearLogsAsync() await MainActor.run { self.logs = "" + self.showFullLogs = false } } }