|
@@ -8,6 +8,7 @@ final class RedditOAuthPanelController: NSObject {
|
|
|
private var panel: NSPanel?
|
|
private var panel: NSPanel?
|
|
|
private var webView: WKWebView?
|
|
private var webView: WKWebView?
|
|
|
private var onComplete: (() -> Void)?
|
|
private var onComplete: (() -> Void)?
|
|
|
|
|
+ private var onAuthError: ((String) -> Void)?
|
|
|
|
|
|
|
|
private override init() {
|
|
private override init() {
|
|
|
super.init()
|
|
super.init()
|
|
@@ -15,11 +16,13 @@ final class RedditOAuthPanelController: NSObject {
|
|
|
|
|
|
|
|
func completeSignIn(
|
|
func completeSignIn(
|
|
|
callbackURL: URL,
|
|
callbackURL: URL,
|
|
|
|
|
+ onAuthError: @escaping (String) -> Void,
|
|
|
onFinished: @escaping () -> Void
|
|
onFinished: @escaping () -> Void
|
|
|
) {
|
|
) {
|
|
|
dismiss()
|
|
dismiss()
|
|
|
|
|
|
|
|
- onComplete = onFinished
|
|
|
|
|
|
|
+ self.onComplete = onFinished
|
|
|
|
|
+ self.onAuthError = onAuthError
|
|
|
|
|
|
|
|
let panel = NSPanel(
|
|
let panel = NSPanel(
|
|
|
contentRect: NSRect(x: 0, y: 0, width: 520, height: 640),
|
|
contentRect: NSRect(x: 0, y: 0, width: 520, height: 640),
|
|
@@ -51,6 +54,7 @@ final class RedditOAuthPanelController: NSObject {
|
|
|
panel = nil
|
|
panel = nil
|
|
|
webView = nil
|
|
webView = nil
|
|
|
onComplete = nil
|
|
onComplete = nil
|
|
|
|
|
+ onAuthError = nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private func finish() {
|
|
private func finish() {
|
|
@@ -66,14 +70,6 @@ extension RedditOAuthPanelController: WKNavigationDelegate {
|
|
|
|
|
|
|
|
if shouldFinish(for: url) {
|
|
if shouldFinish(for: url) {
|
|
|
finish()
|
|
finish()
|
|
|
- return
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if url.host?.lowercased() == "accounts.reddit.com" {
|
|
|
|
|
- DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { [weak self] in
|
|
|
|
|
- guard let self, self.panel != nil else { return }
|
|
|
|
|
- self.finish()
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -97,7 +93,8 @@ extension RedditOAuthPanelController: WKNavigationDelegate {
|
|
|
switch result {
|
|
switch result {
|
|
|
case .success(let callbackURL):
|
|
case .success(let callbackURL):
|
|
|
webView.load(URLRequest(url: callbackURL))
|
|
webView.load(URLRequest(url: callbackURL))
|
|
|
- case .failure:
|
|
|
|
|
|
|
+ case .failure(let error):
|
|
|
|
|
+ self.onAuthError?(error.localizedDescription)
|
|
|
self.finish()
|
|
self.finish()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|