mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-15 05:37:32 +00:00
fix(ios): fix ios http and ws (#9805)
This commit is contained in:
@@ -53,8 +53,8 @@ class AffineHttpHandler: NSObject, WKURLSchemeHandler {
|
|||||||
request.setValue(value, forHTTPHeaderField: key)
|
request.setValue(value, forHTTPHeaderField: key)
|
||||||
}
|
}
|
||||||
|
|
||||||
URLSession.shared.dataTask(with: request) {
|
let task = URLSession.shared.dataTask(with: request) {
|
||||||
rawData, rawResponse, error in
|
(rawData, rawResponse, error) in
|
||||||
urlSchemeTask.stopped?.withLock({
|
urlSchemeTask.stopped?.withLock({
|
||||||
if $0 {
|
if $0 {
|
||||||
return
|
return
|
||||||
@@ -91,12 +91,16 @@ class AffineHttpHandler: NSObject, WKURLSchemeHandler {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
task.resume()
|
||||||
|
|
||||||
|
urlSchemeTask.dataTask = task
|
||||||
}
|
}
|
||||||
|
|
||||||
func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
|
func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
|
||||||
urlSchemeTask.stopped?.withLock({
|
urlSchemeTask.stopped?.withLock({
|
||||||
$0 = true
|
$0 = true
|
||||||
})
|
})
|
||||||
|
urlSchemeTask.dataTask?.cancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,9 +110,18 @@ private extension WKURLSchemeTask {
|
|||||||
return objc_getAssociatedObject(self, &stoppedKey) as? Mutex<Bool> ?? nil
|
return objc_getAssociatedObject(self, &stoppedKey) as? Mutex<Bool> ?? nil
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
objc_setAssociatedObject(self, &stoppedKey, newValue, .OBJC_ASSOCIATION_ASSIGN)
|
objc_setAssociatedObject(self, &stoppedKey, newValue, .OBJC_ASSOCIATION_RETAIN)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var dataTask: URLSessionDataTask? {
|
||||||
|
get {
|
||||||
|
return objc_getAssociatedObject(self, &dataTaskKey) as? URLSessionDataTask
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
objc_setAssociatedObject(self, &dataTaskKey, newValue, .OBJC_ASSOCIATION_RETAIN)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private var stoppedKey = malloc(1)
|
private var stoppedKey = malloc(1)
|
||||||
|
private var dataTaskKey = malloc(1)
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ class AffineWsHandler: NSObject, WKURLSchemeHandler {
|
|||||||
|
|
||||||
func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
|
func webView(_ webView: WKWebView, stop urlSchemeTask: WKURLSchemeTask) {
|
||||||
urlSchemeTask.stopped?.withLock({
|
urlSchemeTask.stopped?.withLock({
|
||||||
$0 = false
|
$0 = true
|
||||||
})
|
})
|
||||||
urlSchemeTask.wsTask?.cancel(with: .abnormalClosure, reason: "Closed".data(using: .utf8))
|
urlSchemeTask.wsTask?.cancel(with: .abnormalClosure, reason: "Closed".data(using: .utf8))
|
||||||
}
|
}
|
||||||
@@ -180,7 +180,7 @@ private extension WKURLSchemeTask {
|
|||||||
return objc_getAssociatedObject(self, &stoppedKey) as? Mutex<Bool> ?? nil
|
return objc_getAssociatedObject(self, &stoppedKey) as? Mutex<Bool> ?? nil
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
objc_setAssociatedObject(self, &stoppedKey, newValue, .OBJC_ASSOCIATION_ASSIGN)
|
objc_setAssociatedObject(self, &stoppedKey, newValue, .OBJC_ASSOCIATION_RETAIN)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var wsTask: URLSessionWebSocketTask? {
|
var wsTask: URLSessionWebSocketTask? {
|
||||||
@@ -188,7 +188,7 @@ private extension WKURLSchemeTask {
|
|||||||
return objc_getAssociatedObject(self, &wsTaskKey) as? URLSessionWebSocketTask
|
return objc_getAssociatedObject(self, &wsTaskKey) as? URLSessionWebSocketTask
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
objc_setAssociatedObject(self, &stoppedKey, newValue, .OBJC_ASSOCIATION_ASSIGN)
|
objc_setAssociatedObject(self, &wsTaskKey, newValue, .OBJC_ASSOCIATION_RETAIN)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,25 +14,25 @@ import '@affine/core/bootstrap/browser';
|
|||||||
*/
|
*/
|
||||||
const rawFetch = globalThis.fetch;
|
const rawFetch = globalThis.fetch;
|
||||||
globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {
|
globalThis.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {
|
||||||
const url = new URL(
|
let url = new URL(
|
||||||
typeof input === 'string'
|
typeof input === 'string'
|
||||||
? input
|
? input
|
||||||
: input instanceof URL
|
: input instanceof URL
|
||||||
? input.toString()
|
? input.toString()
|
||||||
: input.url,
|
: input.url,
|
||||||
globalThis.location.origin
|
globalThis.location.origin
|
||||||
);
|
).href;
|
||||||
|
|
||||||
if (url.protocol === 'capacitor:') {
|
if (url.startsWith('capacitor:')) {
|
||||||
return rawFetch(input, init);
|
return rawFetch(input, init);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url.protocol === 'http:') {
|
if (url.startsWith('http:')) {
|
||||||
url.protocol = 'affine-http:';
|
url = 'affine-http:' + url.slice(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url.protocol === 'https:') {
|
if (url.startsWith('https:')) {
|
||||||
url.protocol = 'affine-https:';
|
url = 'affine-https:' + url.slice(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rawFetch(url, input instanceof Request ? input : init);
|
return rawFetch(url, input instanceof Request ? input : init);
|
||||||
|
|||||||
Reference in New Issue
Block a user