Skip to content

Commit

Permalink
feat: enhance plain upload
Browse files Browse the repository at this point in the history
Resolves: none.
  • Loading branch information
loay-ashraf committed May 25, 2024
1 parent a1edbe0 commit 56eabdf
Show file tree
Hide file tree
Showing 20 changed files with 464 additions and 147 deletions.
34 changes: 29 additions & 5 deletions RxNetworkKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
0B77E0BD29D968DE0077FBC0 /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 0B77E0BC29D968DE0077FBC0 /* RxSwift */; };
0B77E0C029D969370077FBC0 /* RxSwiftExt in Frameworks */ = {isa = PBXBuildFile; productRef = 0B77E0BF29D969370077FBC0 /* RxSwiftExt */; };
C6049B162A95307800E5727E /* RxNetworkKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C6049B152A95307800E5727E /* RxNetworkKit.h */; };
C61A7E242B6276F800407C38 /* HTTPRequestLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61A7E232B6276F800407C38 /* HTTPRequestLogger.swift */; };
C61A7E242B6276F800407C38 /* HTTPLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61A7E232B6276F800407C38 /* HTTPLogger.swift */; };
C61A7E262B62782D00407C38 /* Reactive+RESTResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61A7E252B62782D00407C38 /* Reactive+RESTResponse.swift */; };
C61A7E2A2B62794900407C38 /* URLSession+OutgoingRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61A7E292B62794900407C38 /* URLSession+OutgoingRequest.swift */; };
C61A7E2C2B62798800407C38 /* URLRequest+CURLCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61A7E2B2B62798800407C38 /* URLRequest+CURLCommand.swift */; };
Expand All @@ -52,7 +52,13 @@
C6513B812BF76C7000A19EBC /* WebSocketClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6513B802BF76C7000A19EBC /* WebSocketClient.swift */; };
C6554A2B2AD5BBB60090DD3A /* RESTClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6554A2A2AD5BBB60090DD3A /* RESTClient.swift */; };
C6554A2D2AD5C1560090DD3A /* HTTPClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6554A2C2AD5C1560090DD3A /* HTTPClient.swift */; };
C68FB9C02C0229B900A52FC5 /* Int64+FormattedSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68FB9BF2C0229B900A52FC5 /* Int64+FormattedSize.swift */; };
C68FB9C22C0229E600A52FC5 /* URLRequest+HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68FB9C12C0229E600A52FC5 /* URLRequest+HTTPHeaders.swift */; };
C68FB9C42C022A0800A52FC5 /* FileManager+SizeOfFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68FB9C32C022A0800A52FC5 /* FileManager+SizeOfFile.swift */; };
C68FB9C62C022A7A00A52FC5 /* String+SplitNameAndExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68FB9C52C022A7A00A52FC5 /* String+SplitNameAndExtension.swift */; };
C68FB9C82C024FEC00A52FC5 /* HTTPUploadLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68FB9C72C024FEC00A52FC5 /* HTTPUploadLogger.swift */; };
C69A78562ACF001400ECF092 /* Docs.docc in Sources */ = {isa = PBXBuildFile; fileRef = C69A78552ACEFF3200ECF092 /* Docs.docc */; };
C69BDD082BFD0817007B4CEB /* HTTPUploadRequestFormFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69BDD072BFD0817007B4CEB /* HTTPUploadRequestFormFile.swift */; };
C6A9BEFA2A93F16200459E32 /* URLSessionConfiguration+setAdditionalHTTPHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A9BEF92A93F16200459E32 /* URLSessionConfiguration+setAdditionalHTTPHeader.swift */; };
C6A9BEFD2A93FAF100459E32 /* URLSessionConfiguration+setUserAgentHTTPHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A9BEFC2A93FAF100459E32 /* URLSessionConfiguration+setUserAgentHTTPHeader.swift */; };
C6A9BEFF2A93FB1D00459E32 /* ProcessInfo+operatingSystemName.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A9BEFE2A93FB1D00459E32 /* ProcessInfo+operatingSystemName.swift */; };
Expand Down Expand Up @@ -125,7 +131,7 @@
0B77E08629D965D30077FBC0 /* HTTPDownloadRequestRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPDownloadRequestRouter.swift; sourceTree = "<group>"; };
0B77E08829D965D30077FBC0 /* HTTPUploadRequestRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPUploadRequestRouter.swift; sourceTree = "<group>"; };
C6049B152A95307800E5727E /* RxNetworkKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxNetworkKit.h; sourceTree = "<group>"; };
C61A7E232B6276F800407C38 /* HTTPRequestLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPRequestLogger.swift; sourceTree = "<group>"; };
C61A7E232B6276F800407C38 /* HTTPLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPLogger.swift; sourceTree = "<group>"; };
C61A7E252B62782D00407C38 /* Reactive+RESTResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Reactive+RESTResponse.swift"; sourceTree = "<group>"; };
C61A7E292B62794900407C38 /* URLSession+OutgoingRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSession+OutgoingRequest.swift"; sourceTree = "<group>"; };
C61A7E2B2B62798800407C38 /* URLRequest+CURLCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLRequest+CURLCommand.swift"; sourceTree = "<group>"; };
Expand All @@ -137,7 +143,13 @@
C6513B802BF76C7000A19EBC /* WebSocketClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSocketClient.swift; sourceTree = "<group>"; };
C6554A2A2AD5BBB60090DD3A /* RESTClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RESTClient.swift; sourceTree = "<group>"; };
C6554A2C2AD5C1560090DD3A /* HTTPClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPClient.swift; sourceTree = "<group>"; };
C68FB9BF2C0229B900A52FC5 /* Int64+FormattedSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int64+FormattedSize.swift"; sourceTree = "<group>"; };
C68FB9C12C0229E600A52FC5 /* URLRequest+HTTPHeaders.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLRequest+HTTPHeaders.swift"; sourceTree = "<group>"; };
C68FB9C32C022A0800A52FC5 /* FileManager+SizeOfFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileManager+SizeOfFile.swift"; sourceTree = "<group>"; };
C68FB9C52C022A7A00A52FC5 /* String+SplitNameAndExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+SplitNameAndExtension.swift"; sourceTree = "<group>"; };
C68FB9C72C024FEC00A52FC5 /* HTTPUploadLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPUploadLogger.swift; sourceTree = "<group>"; };
C69A78552ACEFF3200ECF092 /* Docs.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = Docs.docc; sourceTree = "<group>"; };
C69BDD072BFD0817007B4CEB /* HTTPUploadRequestFormFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPUploadRequestFormFile.swift; sourceTree = "<group>"; };
C6A9BEF92A93F16200459E32 /* URLSessionConfiguration+setAdditionalHTTPHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSessionConfiguration+setAdditionalHTTPHeader.swift"; sourceTree = "<group>"; };
C6A9BEFC2A93FAF100459E32 /* URLSessionConfiguration+setUserAgentHTTPHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLSessionConfiguration+setUserAgentHTTPHeader.swift"; sourceTree = "<group>"; };
C6A9BEFE2A93FB1D00459E32 /* ProcessInfo+operatingSystemName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProcessInfo+operatingSystemName.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -251,7 +263,8 @@
C61A7E222B6276D900407C38 /* Logger */ = {
isa = PBXGroup;
children = (
C61A7E232B6276F800407C38 /* HTTPRequestLogger.swift */,
C61A7E232B6276F800407C38 /* HTTPLogger.swift */,
C68FB9C72C024FEC00A52FC5 /* HTTPUploadLogger.swift */,
);
path = Logger;
sourceTree = "<group>";
Expand Down Expand Up @@ -360,9 +373,10 @@
C6554A2E2AD5C4F30090DD3A /* Parameters */ = {
isa = PBXGroup;
children = (
0B77E06229D965D30077FBC0 /* HTTPMIMEType.swift */,
0B77E05329D965D30077FBC0 /* HTTPUploadRequestFile.swift */,
0B77E05229D965D30077FBC0 /* HTTPUploadRequestFormData.swift */,
0B77E06229D965D30077FBC0 /* HTTPMIMEType.swift */,
C69BDD072BFD0817007B4CEB /* HTTPUploadRequestFormFile.swift */,
);
path = Parameters;
sourceTree = "<group>";
Expand Down Expand Up @@ -409,14 +423,18 @@
children = (
0B77E05529D965D30077FBC0 /* Data+AppendString.swift */,
C61A7E2D2B6279C700407C38 /* Data+JSON.swift */,
C68FB9C32C022A0800A52FC5 /* FileManager+SizeOfFile.swift */,
C68FB9BF2C0229B900A52FC5 /* Int64+FormattedSize.swift */,
0B77E08029D965D30077FBC0 /* Observable+Decodable.swift */,
0B77E07F29D965D30077FBC0 /* Observable+Retry.swift */,
0B77E08429D965D30077FBC0 /* Reactive+Curl.swift */,
0B77E05029D965D30077FBC0 /* Reactive+URLSessionAdaptedDownloadResponse.swift */,
0B77E05629D965D30077FBC0 /* Reactive+URLSessionAdaptedUploadResponse.swift */,
0B77E04D29D965D30077FBC0 /* Reactive+URLSessionDownloadResponse.swift */,
0B77E05829D965D30077FBC0 /* Reactive+URLSessionUploadResponse.swift */,
C68FB9C52C022A7A00A52FC5 /* String+SplitNameAndExtension.swift */,
C61A7E2B2B62798800407C38 /* URLRequest+CURLCommand.swift */,
C68FB9C12C0229E600A52FC5 /* URLRequest+HTTPHeaders.swift */,
0B77E04F29D965D30077FBC0 /* URLSession+DownloadTask.swift */,
C61A7E312B62885F00407C38 /* URLSession+LogRequests.swift */,
C61A7E292B62794900407C38 /* URLSession+OutgoingRequest.swift */,
Expand Down Expand Up @@ -660,12 +678,14 @@
C6EAFAED2BF77B00008D3C2B /* HTTPMethod.swift in Sources */,
C6C643092BE6C9340071C2CC /* SecCertificate+Bundle.swift in Sources */,
0B77E0B429D965D30077FBC0 /* HTTPDownloadRequestRouter.swift in Sources */,
C68FB9C42C022A0800A52FC5 /* FileManager+SizeOfFile.swift in Sources */,
C6C643132BE6CA080071C2CC /* Set+SecKey.swift in Sources */,
0B77E09A29D965D30077FBC0 /* HTTPMIMEType.swift in Sources */,
C6A9BEFF2A93FB1D00459E32 /* ProcessInfo+operatingSystemName.swift in Sources */,
C6EAFAE72BF77B00008D3C2B /* HTTPError.swift in Sources */,
C6EAFAF02BF77B00008D3C2B /* HTTPURLResponse+StatusCode.swift in Sources */,
C6C643032BE6C8580071C2CC /* TLSTrustEvaluatorConfiguration.swift in Sources */,
C68FB9C22C0229E600A52FC5 /* URLRequest+HTTPHeaders.swift in Sources */,
0B77E08E29D965D30077FBC0 /* HTTPUploadRequestFile.swift in Sources */,
0B77E08D29D965D30077FBC0 /* HTTPUploadRequestFormData.swift in Sources */,
C61A7E262B62782D00407C38 /* Reactive+RESTResponse.swift in Sources */,
Expand All @@ -692,12 +712,14 @@
C6EAFAE32BF77B00008D3C2B /* DefaultHTTPBodyError.swift in Sources */,
C6EAFAEF2BF77B00008D3C2B /* HTTPStatusCode.swift in Sources */,
C6BDFFF32ACDF5100022F675 /* WebSocketMessage.swift in Sources */,
C61A7E242B6276F800407C38 /* HTTPRequestLogger.swift in Sources */,
C69BDD082BFD0817007B4CEB /* HTTPUploadRequestFormFile.swift in Sources */,
C61A7E242B6276F800407C38 /* HTTPLogger.swift in Sources */,
C6C6430B2BE6C9510071C2CC /* SecCertificate+PublicKey.swift in Sources */,
C61A7E302B627B3000407C38 /* SessionConfiguration.swift in Sources */,
C6EAFAE42BF77B00008D3C2B /* HTTPAPIError.swift in Sources */,
C6B4B4C42AD47A2F009073ED /* WebSocketError.swift in Sources */,
0B77E0A429D965D30077FBC0 /* NetworkReachability.swift in Sources */,
C68FB9C62C022A7A00A52FC5 /* String+SplitNameAndExtension.swift in Sources */,
C6EAFAE62BF77B00008D3C2B /* HTTPClientError.swift in Sources */,
0B77E0B229D965D30077FBC0 /* Completable+Retry.swift in Sources */,
0B77E0B029D965D30077FBC0 /* Observable+Retry.swift in Sources */,
Expand All @@ -721,11 +743,13 @@
0B77E09229D965D30077FBC0 /* HTTPUploadRequestEvent.swift in Sources */,
0B77E09029D965D30077FBC0 /* Data+AppendString.swift in Sources */,
C6BDFFE82ACDF3830022F675 /* Reactive+WebSocketReceive.swift in Sources */,
C68FB9C02C0229B900A52FC5 /* Int64+FormattedSize.swift in Sources */,
C61A7E322B62885F00407C38 /* URLSession+LogRequests.swift in Sources */,
0B77E08929D965D30077FBC0 /* Reactive+URLSessionDownloadResponse.swift in Sources */,
C6554A2D2AD5C1560090DD3A /* HTTPClient.swift in Sources */,
C61A7E2A2B62794900407C38 /* URLSession+OutgoingRequest.swift in Sources */,
C6EAFAE92BF77B00008D3C2B /* HTTPRequestAdapter.swift in Sources */,
C68FB9C82C024FEC00A52FC5 /* HTTPUploadLogger.swift in Sources */,
C6BDFFEC2ACDF4100022F675 /* Reactive+WebSocketPing.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
24 changes: 24 additions & 0 deletions Source/HTTP/Extensions/FileManager+SizeOfFile.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
//
// FileManager+SizeOfFile.swift
// RxNetworkKit
//
// Created by Loay Ashraf on 25/05/2024.
//

import Foundation

extension FileManager {
func sizeOfFile(atPath path: String) -> Int64? {
guard let attrs = try? attributesOfItem(atPath: path) else {
return nil
}
return attrs[.size] as? Int64
}

func sizeOfFile(atURL url: URL) -> Int64? {
guard let attributes = try? attributesOfItem(atPath: url.path) else {
return nil
}
return attributes[.size] as? Int64
}
}
18 changes: 18 additions & 0 deletions Source/HTTP/Extensions/Int64+FormattedSize.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//
// Int64+FormattedSize.swift
// RxNetworkKit
//
// Created by Loay Ashraf on 25/05/2024.
//

import Foundation

extension Int64 {
var formattedSize: String {
let bcf = ByteCountFormatter()
bcf.allowedUnits = [.useKB, .useMB, .useGB]
bcf.countStyle = .file
let size = bcf.string(fromByteCount: self)
return size
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ extension Reactive where Base: URLSession {
let task = self.base.fileDownloadTask(with: request) { data, response, error in
#if DEBUG
if URLSession.logRequests {
HTTPRequestLogger.shared.log(response: (request.url, response, data, error), bodyPlaceholder: "[File Body]")
HTTPLogger.shared.log(responseArguments: (request.url, data, response, error), bodyLogMessage: "[File Body]")
}
#endif
guard let response = response, let data = data else {
Expand Down Expand Up @@ -66,7 +66,7 @@ extension Reactive where Base: URLSession {
let task = self.base.fileDownloadTask(with: request, saveTo: url) { data, response, error in
#if DEBUG
if URLSession.logRequests {
HTTPRequestLogger.shared.log(response: (request.url, response, data, error), bodyPlaceholder: "[File Body]")
HTTPLogger.shared.log(responseArguments: (request.url, data, response, error), bodyLogMessage: "[File Body]")
}
#endif
guard let response = response, let data = data else {
Expand Down
Loading

0 comments on commit 56eabdf

Please sign in to comment.