108 lines
3.3 KiB
Swift
108 lines
3.3 KiB
Swift
//
|
|
// SettingsView.swift
|
|
// Nextcloud Cookbook iOS Client
|
|
//
|
|
// Created by Vincent Meilinger on 15.09.23.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftUI
|
|
|
|
fileprivate enum SettingsAlert {
|
|
case LOG_OUT,
|
|
DELETE_CACHE,
|
|
NONE
|
|
|
|
func getTitle() -> String {
|
|
switch self {
|
|
case .LOG_OUT: return "Log out"
|
|
case .DELETE_CACHE: return "Delete local data"
|
|
default: return "Please confirm your action."
|
|
}
|
|
}
|
|
|
|
func getMessage() -> String {
|
|
switch self {
|
|
case .LOG_OUT: return "Are you sure that you want to log out of your account?"
|
|
case .DELETE_CACHE: return "Are you sure that you want to delete the downloaded recipes? This action will not affect any recipes stored on your server."
|
|
default: return ""
|
|
}
|
|
}
|
|
}
|
|
|
|
struct SettingsView: View {
|
|
@ObservedObject var userSettings: UserSettings
|
|
@ObservedObject var viewModel: MainViewModel
|
|
|
|
@State fileprivate var alertType: SettingsAlert = .NONE
|
|
@State var showAlert: Bool = false
|
|
|
|
var body: some View {
|
|
Form {
|
|
Section() {
|
|
Link("Visit the GitHub page", destination: URL(string: "https://github.com/VincentMeilinger/Nextcloud-Cookbook-iOS")!)
|
|
} header: {
|
|
Text("About")
|
|
} footer: {
|
|
Text("If you are interested in contributing to this project or simply wish to review its source code, we encourage you to visit the GitHub repository for this application.")
|
|
}
|
|
|
|
Section() {
|
|
Link("Get support", destination: URL(string: "https://vincentmeilinger.github.io/Nextcloud-Cookbook-Client-Support/")!)
|
|
} header: {
|
|
Text("Support")
|
|
} footer: {
|
|
Text("If you have any inquiries, feedback, or require assistance, please refer to the support page for contact information.")
|
|
}
|
|
|
|
Section() {
|
|
Button("Log out") {
|
|
print("Log out.")
|
|
alertType = .LOG_OUT
|
|
showAlert = true
|
|
|
|
}
|
|
.tint(.red)
|
|
|
|
Button("Delete local data") {
|
|
print("Clear cache.")
|
|
alertType = .DELETE_CACHE
|
|
showAlert = true
|
|
}
|
|
.tint(.red)
|
|
|
|
} header: {
|
|
Text("Other")
|
|
} footer: {
|
|
Text("Deleting local data will not affect the recipe data stored on your server.")
|
|
}
|
|
}
|
|
.navigationTitle("Settings")
|
|
.alert(alertType.getTitle(), isPresented: $showAlert) {
|
|
Button("Cancel", role: .cancel) { }
|
|
if alertType == .LOG_OUT {
|
|
Button("Log out", role: .destructive) { logOut() }
|
|
} else if alertType == .DELETE_CACHE {
|
|
Button("Delete", role: .destructive) { deleteCache() }
|
|
}
|
|
} message: {
|
|
Text(alertType.getMessage())
|
|
}
|
|
}
|
|
|
|
func logOut() {
|
|
userSettings.serverAddress = ""
|
|
userSettings.username = ""
|
|
userSettings.token = ""
|
|
viewModel.deleteAllData()
|
|
userSettings.onboarding = true
|
|
}
|
|
|
|
func deleteCache() {
|
|
//viewModel.deleteAllData()
|
|
}
|
|
}
|
|
|
|
|
|
|