mirror of
https://github.com/ichmagmaus111/ghostgram.git
synced 2026-09-22 20:30:41 +02:00
Update Ghostgram features
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")
|
||||
|
||||
swift_library(
|
||||
name = "SGRequests",
|
||||
module_name = "SGRequests",
|
||||
srcs = glob([
|
||||
"Sources/**/*.swift",
|
||||
]),
|
||||
copts = [
|
||||
"-warnings-as-errors",
|
||||
],
|
||||
deps = [
|
||||
"//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit"
|
||||
],
|
||||
visibility = [
|
||||
"//visibility:public",
|
||||
],
|
||||
)
|
||||
@@ -0,0 +1,72 @@
|
||||
import Foundation
|
||||
import SwiftSignalKit
|
||||
|
||||
|
||||
public func requestsDownload(url: URL) -> Signal<(Data, URLResponse?), Error?> {
|
||||
return Signal { subscriber in
|
||||
let completed = Atomic<Bool>(value: false)
|
||||
|
||||
let downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: { location, response, error in
|
||||
let _ = completed.swap(true)
|
||||
if let location = location, let data = try? Data(contentsOf: location) {
|
||||
subscriber.putNext((data, response))
|
||||
subscriber.putCompletion()
|
||||
} else {
|
||||
subscriber.putError(error)
|
||||
}
|
||||
})
|
||||
downloadTask.resume()
|
||||
|
||||
return ActionDisposable {
|
||||
if !completed.with({ $0 }) {
|
||||
downloadTask.cancel()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public func requestsGet(url: URL) -> Signal<(Data, URLResponse?), Error?> {
|
||||
return Signal { subscriber in
|
||||
let completed = Atomic<Bool>(value: false)
|
||||
|
||||
let urlTask = URLSession.shared.dataTask(with: url, completionHandler: { data, response, error in
|
||||
let _ = completed.swap(true)
|
||||
if let strongData = data {
|
||||
subscriber.putNext((strongData, response))
|
||||
subscriber.putCompletion()
|
||||
} else {
|
||||
subscriber.putError(error)
|
||||
}
|
||||
})
|
||||
urlTask.resume()
|
||||
|
||||
return ActionDisposable {
|
||||
if !completed.with({ $0 }) {
|
||||
urlTask.cancel()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public func requestsCustom(request: URLRequest) -> Signal<(Data, URLResponse?), Error?> {
|
||||
return Signal { subscriber in
|
||||
let completed = Atomic<Bool>(value: false)
|
||||
let urlTask = URLSession.shared.dataTask(with: request, completionHandler: { data, response, error in
|
||||
_ = completed.swap(true)
|
||||
if let strongData = data {
|
||||
subscriber.putNext((strongData, response))
|
||||
subscriber.putCompletion()
|
||||
} else {
|
||||
subscriber.putError(error)
|
||||
}
|
||||
})
|
||||
urlTask.resume()
|
||||
|
||||
return ActionDisposable {
|
||||
if !completed.with({ $0 }) {
|
||||
urlTask.cancel()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user