Add username/password login and keychain manager

Fix #224
This commit is contained in:
Arkadiusz Fal
2022-08-26 01:36:46 +02:00
parent 08ed810b9e
commit 2f2fd67860
19 changed files with 280 additions and 107 deletions

View File

@@ -63,10 +63,6 @@ struct AccountForm: View {
#if os(macOS)
.padding(.horizontal)
#endif
#if os(iOS)
helpButton
#endif
}
#else
formFields
@@ -76,33 +72,10 @@ struct AccountForm: View {
.onChange(of: password) { _ in validate() }
}
var helpButton: some View {
Group {
if instance.app == .invidious {
Button {
openURL(URL(string: "https://github.com/yattee/yattee/wiki/Adding-Invidious-instance-and-account")!)
} label: {
Label("How to add Invidious account?", systemImage: "questionmark.circle")
#if os(macOS)
.help("How to add Invidious account?")
.labelStyle(.iconOnly)
#endif
}
}
}
}
var formFields: some View {
Group {
if !instance.app.accountsUsePassword {
TextField("Name", text: $name)
}
TextField(usernamePrompt, text: $username)
if instance.app.accountsUsePassword {
SecureField("Password", text: $password)
}
TextField("Username", text: $username)
SecureField("Password", text: $password)
}
}
@@ -127,10 +100,6 @@ struct AccountForm: View {
Spacer()
#if os(macOS)
helpButton
#endif
Button("Save", action: submitForm)
.disabled(!isValid)
#if !os(tvOS)
@@ -148,9 +117,7 @@ struct AccountForm: View {
isValid = false
validationDebounce.invalidate()
let passwordIsValid = instance.app.accountsUsePassword ? !password.isEmpty : true
guard !username.isEmpty, passwordIsValid else {
guard !username.isEmpty, !password.isEmpty else {
validator.reset()
return
}

View File

@@ -6,6 +6,7 @@ struct BrowsingSettings: View {
@Default(.accountPickerDisplaysUsername) private var accountPickerDisplaysUsername
@Default(.roundedThumbnails) private var roundedThumbnails
#endif
@Default(.accountPickerDisplaysAnonymousAccounts) private var accountPickerDisplaysAnonymousAccounts
#if os(iOS)
@Default(.lockPortraitWhenBrowsing) private var lockPortraitWhenBrowsing
#endif
@@ -37,9 +38,7 @@ struct BrowsingSettings: View {
private var sections: some View {
Group {
#if !os(tvOS)
interfaceSettings
#endif
interfaceSettings
thumbnailsSettings
visibleSectionsSettings
}
@@ -61,6 +60,8 @@ struct BrowsingSettings: View {
#if !os(tvOS)
Toggle("Show account username", isOn: $accountPickerDisplaysUsername)
#endif
Toggle("Show anonymous accounts", isOn: $accountPickerDisplaysAnonymousAccounts)
}
}

View File

@@ -225,11 +225,11 @@ struct SettingsView: View {
private var windowHeight: Double {
switch selection {
case .browsing:
return 390
return 400
case .player:
return 420
case .quality:
return 400
return 420
case .history:
return 480
case .sponsorBlock: