mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-24 04:03:03 -04:00
Move DataStream to a new function
This commit is contained in:
parent
6226415653
commit
c6730875df
@ -86,31 +86,7 @@ final class KiwixURLSchemeHandler: NSObject, WKURLSchemeHandler {
|
||||
return
|
||||
}
|
||||
|
||||
let dataProvider: any DataProvider<URLContent>
|
||||
let ranges: [ClosedRange<UInt>] // the list of ranges we should use to stream data
|
||||
let size2MB: UInt = 2097152
|
||||
if metaData.isMediaType, let directAccess = await directAccessInfo(for: url) {
|
||||
dataProvider = ZimDirectContentProvider(directAccess: directAccess,
|
||||
contentSize: metaData.size)
|
||||
ranges = ByteRanges.rangesFor(
|
||||
contentLength: metaData.size,
|
||||
rangeSize: size2MB
|
||||
)
|
||||
} else {
|
||||
dataProvider = ZimContentProvider(for: url)
|
||||
// if the data is larger than 2MB, read it "in chunks"
|
||||
if metaData.size > size2MB {
|
||||
ranges = ByteRanges.rangesFor(
|
||||
contentLength: metaData.size,
|
||||
rangeSize: size2MB
|
||||
)
|
||||
} else { // use the full range and read it in one go
|
||||
ranges = [0...metaData.size]
|
||||
}
|
||||
}
|
||||
|
||||
guard let dataStream = DataStream(dataProvider: dataProvider, ranges: ranges)
|
||||
else {
|
||||
guard let dataStream = await dataStream(for: url, metaData: metaData) else {
|
||||
sendHTTP404Response(urlSchemeTask, url: url)
|
||||
return
|
||||
}
|
||||
@ -138,6 +114,32 @@ final class KiwixURLSchemeHandler: NSObject, WKURLSchemeHandler {
|
||||
|
||||
// MARK: Reading content
|
||||
|
||||
private func dataStream(for url: URL, metaData: URLContentMetaData) async -> DataStream<URLContent>? {
|
||||
let dataProvider: any DataProvider<URLContent>
|
||||
let ranges: [ClosedRange<UInt>] // the list of ranges we should use to stream data
|
||||
let size2MB: UInt = 2097152 // 2MB
|
||||
if metaData.isMediaType, let directAccess = await directAccessInfo(for: url) {
|
||||
dataProvider = ZimDirectContentProvider(directAccess: directAccess,
|
||||
contentSize: metaData.size)
|
||||
ranges = ByteRanges.rangesFor(
|
||||
contentLength: metaData.size,
|
||||
rangeSize: size2MB
|
||||
)
|
||||
} else {
|
||||
dataProvider = ZimContentProvider(for: url)
|
||||
// if the data is larger than 2MB, read it "in chunks"
|
||||
if metaData.size > size2MB {
|
||||
ranges = ByteRanges.rangesFor(
|
||||
contentLength: metaData.size,
|
||||
rangeSize: size2MB
|
||||
)
|
||||
} else { // use the full range and read it in one go
|
||||
ranges = [0...metaData.size]
|
||||
}
|
||||
}
|
||||
return DataStream(dataProvider: dataProvider, ranges: ranges)
|
||||
}
|
||||
|
||||
private func contentMetaData(for url: URL) async -> URLContentMetaData? {
|
||||
return await withCheckedContinuation { continuation in
|
||||
Task.detached(priority: .utility) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user