passepartout-apple/Passepartout/App/Views/DiagnosticsView.swift

120 lines
3.1 KiB
Swift
Raw Normal View History

2019-11-02 10:18:20 +00:00
//
2022-04-12 13:09:14 +00:00
// DiagnosticsView.swift
2021-01-01 16:53:28 +00:00
// Passepartout
2019-11-02 10:18:20 +00:00
//
2022-04-12 13:09:14 +00:00
// Created by Davide De Rosa on 2/20/22.
2023-03-17 15:56:19 +00:00
// Copyright (c) 2023 Davide De Rosa. All rights reserved.
2019-11-02 10:18:20 +00:00
//
// https://github.com/passepartoutvpn
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
2022-06-23 21:31:01 +00:00
import PassepartoutLibrary
import SwiftUI
2019-11-02 10:18:20 +00:00
2022-04-12 13:09:14 +00:00
struct DiagnosticsView: View {
let profile: Profile
2022-04-12 13:09:14 +00:00
var body: some View {
Group {
if !profile.isPlaceholder {
vpnView
} else {
genericView
}
}.navigationTitle(L10n.Diagnostics.title)
}
}
private extension DiagnosticsView {
var vpnView: some View {
Group {
switch profile.currentVPNProtocol {
2022-04-12 13:09:14 +00:00
case .openVPN:
DiagnosticsView.OpenVPNView(
providerName: profile.header.providerName
2022-04-12 13:09:14 +00:00
)
2023-03-17 20:55:47 +00:00
2022-04-12 13:09:14 +00:00
case .wireGuard:
DiagnosticsView.WireGuardView(
providerName: profile.header.providerName
2022-04-12 13:09:14 +00:00
)
}
}
}
var genericView: some View {
List {
Section {
DebugLogGroup(
appLogURL: Passepartout.shared.logger.logFile,
tunnelLogURL: nil
)
} header: {
Text(L10n.DebugLog.title)
}
}
2019-11-04 09:05:38 +00:00
}
2019-11-02 10:18:20 +00:00
}
extension DiagnosticsView {
struct DebugLogGroup: View {
let appLogURL: URL?
2023-03-17 20:55:47 +00:00
let tunnelLogURL: URL?
2023-03-17 20:55:47 +00:00
private let refreshInterval = Constants.Log.refreshInterval
var body: some View {
appLink
tunnelLink
}
}
}
// MARK: -
2023-03-17 20:55:47 +00:00
private extension DiagnosticsView.DebugLogGroup {
var appLink: some View {
navigationLink(
withTitle: L10n.Diagnostics.Items.AppLog.title,
url: appLogURL,
refreshInterval: nil
)
}
var tunnelLink: some View {
navigationLink(
withTitle: Unlocalized.VPN.vpn,
url: tunnelLogURL,
refreshInterval: refreshInterval
)
}
func navigationLink(withTitle title: String, url: URL?, refreshInterval: TimeInterval?) -> some View {
NavigationLink(title) {
url.map {
DebugLogView(
title: title,
url: $0,
refreshInterval: refreshInterval
)
}
}.disabled(url == nil)
}
}