mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Continue adopting async/await.
This commit is contained in:
@@ -63,13 +63,13 @@ enum DetailState: Equatable {
|
||||
func stopMediaPlayback() {
|
||||
currentWebViewController.stopMediaPlayback()
|
||||
}
|
||||
|
||||
func canScrollDown(_ callback: @escaping (Bool) -> Void) {
|
||||
currentWebViewController.canScrollDown(callback)
|
||||
|
||||
func canScrollDown() async -> Bool {
|
||||
await currentWebViewController.canScrollDown()
|
||||
}
|
||||
|
||||
func canScrollUp(_ callback: @escaping (Bool) -> Void) {
|
||||
currentWebViewController.canScrollUp(callback)
|
||||
func canScrollUp() async -> Bool {
|
||||
await currentWebViewController.canScrollUp()
|
||||
}
|
||||
|
||||
override func scrollPageDown(_ sender: Any?) {
|
||||
|
||||
@@ -161,16 +161,14 @@ protocol DetailWebViewControllerDelegate: AnyObject {
|
||||
|
||||
// MARK: Scrolling
|
||||
|
||||
func canScrollDown(_ completion: @escaping (Bool) -> Void) {
|
||||
fetchScrollInfo { (scrollInfo) in
|
||||
completion(scrollInfo?.canScrollDown ?? false)
|
||||
}
|
||||
func canScrollDown() async -> Bool {
|
||||
let scrollInfo = await scrollInfo()
|
||||
return scrollInfo?.canScrollDown ?? false
|
||||
}
|
||||
|
||||
func canScrollUp(_ completion: @escaping (Bool) -> Void) {
|
||||
fetchScrollInfo { (scrollInfo) in
|
||||
completion(scrollInfo?.canScrollUp ?? false)
|
||||
}
|
||||
func canScrollUp() async -> Bool {
|
||||
let scrollInfo = await scrollInfo()
|
||||
return scrollInfo?.canScrollUp ?? false
|
||||
}
|
||||
|
||||
override func scrollPageDown(_ sender: Any?) {
|
||||
@@ -292,7 +290,8 @@ private extension DetailWebViewController {
|
||||
}
|
||||
|
||||
func reloadHTMLMaintainingScrollPosition() {
|
||||
fetchScrollInfo() { scrollInfo in
|
||||
Task { @MainActor in
|
||||
let scrollInfo = await scrollInfo()
|
||||
self.windowScrollY = scrollInfo?.offsetY
|
||||
self.reloadHTML()
|
||||
}
|
||||
@@ -330,21 +329,23 @@ private extension DetailWebViewController {
|
||||
webView.loadHTMLString(html, baseURL: ArticleRenderer.page.baseURL)
|
||||
}
|
||||
|
||||
func fetchScrollInfo(_ completion: @escaping (ScrollInfo?) -> Void) {
|
||||
func scrollInfo() async -> ScrollInfo? {
|
||||
let javascriptString = "var x = {contentHeight: document.body.scrollHeight, offsetY: window.pageYOffset}; x"
|
||||
|
||||
webView.evaluateJavaScript(javascriptString) { (info, error) in
|
||||
guard let info = info as? [String: Any] else {
|
||||
completion(nil)
|
||||
return
|
||||
}
|
||||
guard let contentHeight = info["contentHeight"] as? CGFloat, let offsetY = info["offsetY"] as? CGFloat else {
|
||||
completion(nil)
|
||||
return
|
||||
}
|
||||
return await withCheckedContinuation { continuation in
|
||||
webView.evaluateJavaScript(javascriptString) { (info, error) in
|
||||
guard let info = info as? [String: Any] else {
|
||||
continuation.resume(returning: nil)
|
||||
return
|
||||
}
|
||||
guard let contentHeight = info["contentHeight"] as? CGFloat, let offsetY = info["offsetY"] as? CGFloat else {
|
||||
continuation.resume(returning: nil)
|
||||
return
|
||||
}
|
||||
|
||||
let scrollInfo = ScrollInfo(contentHeight: contentHeight, viewHeight: self.webView.frame.height, offsetY: offsetY)
|
||||
completion(scrollInfo)
|
||||
let scrollInfo = ScrollInfo(contentHeight: contentHeight, viewHeight: self.webView.frame.height, offsetY: offsetY)
|
||||
continuation.resume(returning: scrollInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -310,9 +310,15 @@ enum TimelineSourceMode {
|
||||
guard let detailViewController = detailViewController else {
|
||||
return
|
||||
}
|
||||
detailViewController.canScrollDown { (canScroll) in
|
||||
|
||||
Task { @MainActor in
|
||||
let canScroll = await detailViewController.canScrollDown()
|
||||
NSCursor.setHiddenUntilMouseMoves(true)
|
||||
canScroll ? detailViewController.scrollPageDown(sender) : self.nextUnread(sender)
|
||||
if canScroll {
|
||||
detailViewController.scrollPageDown(sender)
|
||||
} else {
|
||||
nextUnread(sender)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,13 +326,14 @@ enum TimelineSourceMode {
|
||||
guard let detailViewController = detailViewController else {
|
||||
return
|
||||
}
|
||||
detailViewController.canScrollUp { (canScroll) in
|
||||
if (canScroll) {
|
||||
|
||||
Task { @MainActor in
|
||||
let canScroll = await detailViewController.canScrollUp()
|
||||
if canScroll {
|
||||
NSCursor.setHiddenUntilMouseMoves(true)
|
||||
detailViewController.scrollPageUp(sender)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@IBAction func copyArticleURL(_ sender: Any?) {
|
||||
|
||||
Reference in New Issue
Block a user