Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 3933ff9

Browse files
committed
Convert FilePart to Objective-C to be used in API abstraction layer
1 parent 7d0757c commit 3933ff9

File tree

8 files changed

+59
-32
lines changed

8 files changed

+59
-32
lines changed

WordPressKit.xcodeproj/project.pbxproj

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@
7171
3F758FD324F6C68200BBA2FC /* AnnouncementServiceRemote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F758FD224F6C68200BBA2FC /* AnnouncementServiceRemote.swift */; };
7272
3F8308A729EE683500354497 /* ActivityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8308A629EE683500354497 /* ActivityTests.swift */; };
7373
3FB8642C2888089F003A86BE /* BuildkiteTestCollector in Frameworks */ = {isa = PBXBuildFile; productRef = 3FB8642B2888089F003A86BE /* BuildkiteTestCollector */; };
74+
3FE2E9492BB14322002CA2E1 /* FilePart.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FE2E9482BB14322002CA2E1 /* FilePart.m */; };
75+
3FE2E94B2BB14342002CA2E1 /* FilePart.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE2E94A2BB1433B002CA2E1 /* FilePart.h */; settings = {ATTRIBUTES = (Public, ); }; };
7476
3FFCC0412BA995290051D229 /* Date+WordPressComTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFCC0402BA995290051D229 /* Date+WordPressComTests.swift */; };
7577
3FFCC0472BAA6EF40051D229 /* NSDate+WordPressCom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFCC0462BAA6EF40051D229 /* NSDate+WordPressCom.swift */; };
7678
3FFCC0492BAB98130051D229 /* DateFormatter+WordPressCom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFCC0482BAB98130051D229 /* DateFormatter+WordPressCom.swift */; };
@@ -803,6 +805,8 @@
803805
3F758FD224F6C68200BBA2FC /* AnnouncementServiceRemote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementServiceRemote.swift; sourceTree = "<group>"; };
804806
3F8308A629EE683500354497 /* ActivityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityTests.swift; sourceTree = "<group>"; };
805807
3FB8642D288813E9003A86BE /* UnitTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UnitTests.xctestplan; sourceTree = "<group>"; };
808+
3FE2E9482BB14322002CA2E1 /* FilePart.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FilePart.m; sourceTree = "<group>"; };
809+
3FE2E94A2BB1433B002CA2E1 /* FilePart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilePart.h; sourceTree = "<group>"; };
806810
3FFCC0402BA995290051D229 /* Date+WordPressComTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+WordPressComTests.swift"; sourceTree = "<group>"; };
807811
3FFCC0462BAA6EF40051D229 /* NSDate+WordPressCom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSDate+WordPressCom.swift"; sourceTree = "<group>"; };
808812
3FFCC0482BAB98130051D229 /* DateFormatter+WordPressCom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DateFormatter+WordPressCom.swift"; sourceTree = "<group>"; };
@@ -2528,22 +2532,24 @@
25282532
93BD27731EE7388E002BB00B /* WordPressAPI */ = {
25292533
isa = PBXGroup;
25302534
children = (
2531-
3FFCC0552BABC78B0051D229 /* WordPressComRESTAPIInterfacing.h */,
2532-
4A05E7952B2FCB6400C25E3B /* NonceRetrieval.swift */,
2533-
4A05E7992B2FDC3200C25E3B /* WordPressOrgRestApi.swift */,
2534-
93BD27741EE73944002BB00B /* HTTPAuthenticationAlertController.swift */,
2535-
3FFCC0462BAA6EF40051D229 /* NSDate+WordPressCom.swift */,
25362535
3FFCC04E2BABA6E60051D229 /* Date+WordPressCom.swift */,
25372536
3FFCC0482BAB98130051D229 /* DateFormatter+WordPressCom.swift */,
2537+
3FE2E94A2BB1433B002CA2E1 /* FilePart.h */,
2538+
3FE2E9482BB14322002CA2E1 /* FilePart.m */,
2539+
93BD27741EE73944002BB00B /* HTTPAuthenticationAlertController.swift */,
2540+
4A11239D2B1926D1004690CF /* HTTPClient.swift */,
2541+
4A11239B2B1926B7004690CF /* HTTPRequestBuilder.swift */,
2542+
4A05E7952B2FCB6400C25E3B /* NonceRetrieval.swift */,
2543+
3FFCC0462BAA6EF40051D229 /* NSDate+WordPressCom.swift */,
2544+
4A1123992B19269A004690CF /* WordPressAPIError.swift */,
2545+
4A57A6822B54A326008D0660 /* WordPressAPIError+NSErrorBrdige.swift */,
25382546
93BD27771EE73944002BB00B /* WordPressComOAuthClient.swift */,
25392547
93BD27781EE73944002BB00B /* WordPressComRestApi.swift */,
2548+
3FFCC0552BABC78B0051D229 /* WordPressComRESTAPIInterfacing.h */,
2549+
4A05E7992B2FDC3200C25E3B /* WordPressOrgRestApi.swift */,
25402550
93BD27791EE73944002BB00B /* WordPressOrgXMLRPCApi.swift */,
25412551
93BD277A1EE73944002BB00B /* WordPressOrgXMLRPCValidator.swift */,
25422552
93BD277B1EE73944002BB00B /* WordPressRSDParser.swift */,
2543-
4A11239D2B1926D1004690CF /* HTTPClient.swift */,
2544-
4A11239B2B1926B7004690CF /* HTTPRequestBuilder.swift */,
2545-
4A1123992B19269A004690CF /* WordPressAPIError.swift */,
2546-
4A57A6822B54A326008D0660 /* WordPressAPIError+NSErrorBrdige.swift */,
25472553
);
25482554
name = WordPressAPI;
25492555
sourceTree = "<group>";
@@ -2810,6 +2816,7 @@
28102816
9368C78C1EC5EF1B0092CE8E /* WordPressKit.h in Headers */,
28112817
93C674F11EE8351E00BFAF05 /* NSMutableDictionary+Helpers.h in Headers */,
28122818
93BD273C1EE73282002BB00B /* AccountServiceRemoteREST.h in Headers */,
2819+
3FE2E94B2BB14342002CA2E1 /* FilePart.h in Headers */,
28132820
93BD27711EE737A8002BB00B /* ServiceRemoteWordPressXMLRPC.h in Headers */,
28142821
93BD276F1EE737A8002BB00B /* ServiceRemoteWordPressComREST.h in Headers */,
28152822
93BD273B1EE73282002BB00B /* AccountServiceRemote.h in Headers */,
@@ -3382,6 +3389,7 @@
33823389
4A68E3D529406AA0004AC3DC /* RemoteMenuLocation.swift in Sources */,
33833390
8B16CE8E25250039007BE5A9 /* RemoteReaderPost.swift in Sources */,
33843391
74E2294E1F1E73FE0085F7F2 /* RemotePublicizeService.swift in Sources */,
3392+
3FE2E9492BB14322002CA2E1 /* FilePart.m in Sources */,
33853393
8B749DED25AF3E4600023F03 /* JetpackCapabilitiesServiceRemote.swift in Sources */,
33863394
9F3E0BA22087345F009CB5BA /* ServiceRequest.swift in Sources */,
33873395
E1A6605F1FD694ED00BAC339 /* PluginDirectoryEntry.swift in Sources */,

WordPressKit/FilePart.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#import <Foundation/Foundation.h>
2+
3+
/// Represents the infomartion needed to encode a file on a multipart form request.
4+
@interface FilePart: NSObject
5+
6+
@property (strong, nonatomic) NSString * _Nonnull parameterName;
7+
@property (strong, nonatomic) NSURL * _Nonnull url;
8+
@property (strong, nonatomic) NSString * _Nonnull fileName;
9+
@property (strong, nonatomic) NSString * _Nonnull mimeType;
10+
11+
- (instancetype _Nonnull)initWithParameterName:(NSString * _Nonnull)parameterName
12+
url:(NSURL * _Nonnull)url
13+
fileName:(NSString * _Nonnull)fileName
14+
mimeType:(NSString * _Nonnull)mimeType;
15+
16+
@end

WordPressKit/FilePart.m

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#import "FilePart.h"
2+
3+
@implementation FilePart
4+
5+
- (instancetype)initWithParameterName:(NSString *)parameterName
6+
url:(NSURL *)url
7+
fileName:(NSString *)fileName
8+
mimeType:(NSString *)mimeType
9+
{
10+
self = [super init];
11+
self.parameterName = parameterName;
12+
self.url = url;
13+
self.fileName = fileName;
14+
self.mimeType = mimeType;
15+
return self;
16+
}
17+
18+
@end

WordPressKit/MediaServiceRemoteREST.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ - (void)uploadMedia:(NSArray *)mediaItems
139139
if (remoteMedia.postID != nil && [remoteMedia.postID compare:@(0)] == NSOrderedDescending) {
140140
parameters[@"attrs[0][parent_id]"] = remoteMedia.postID;
141141
}
142-
FilePart *filePart = [[FilePart alloc] initWithParameterName:@"media[]" url:remoteMedia.localURL filename:filename mimeType:type];
142+
FilePart *filePart = [[FilePart alloc] initWithParameterName:@"media[]" url:remoteMedia.localURL fileName:filename mimeType:type];
143143
[fileParts addObject:filePart];
144144
}
145145

@@ -203,7 +203,7 @@ - (void)uploadMedia:(RemoteMedia *)media
203203
}
204204
return;
205205
}
206-
FilePart *filePart = [[FilePart alloc] initWithParameterName:@"media[]" url:media.localURL filename:filename mimeType:type];
206+
FilePart *filePart = [[FilePart alloc] initWithParameterName:@"media[]" url:media.localURL fileName:filename mimeType:type];
207207
__block NSProgress *localProgress = [self.wordPressComRestApi multipartPOST:requestUrl
208208
parameters:parameters
209209
fileParts:@[filePart]

WordPressKit/PostServiceRemoteREST.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ - (void)createPost:(RemotePost *)post
164164
parameters[@"content"] = post.content;
165165
parameters[@"title"] = post.title;
166166
parameters[@"status"] = post.status;
167-
FilePart *filePart = [[FilePart alloc] initWithParameterName:@"media[]" url:media.localURL filename:filename mimeType:type];
167+
FilePart *filePart = [[FilePart alloc] initWithParameterName:@"media[]" url:media.localURL fileName:filename mimeType:type];
168168
[self.wordPressComRestApi multipartPOST:requestUrl
169169
parameters:parameters
170170
fileParts:@[filePart]

WordPressKit/WordPressComRestApi.swift

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ open class WordPressComRestApi: NSObject {
452452
let builder: HTTPRequestBuilder
453453
do {
454454
let form = try fileParts.map {
455-
try MultipartFormField(fileAtPath: $0.url.path, name: $0.parameterName, filename: $0.filename, mimeType: $0.mimeType)
455+
try MultipartFormField(fileAtPath: $0.url.path, name: $0.parameterName, filename: $0.fileName, mimeType: $0.mimeType)
456456
}
457457
builder = try requestBuilder(URLString: URLString)
458458
.method(.post)
@@ -476,23 +476,6 @@ open class WordPressComRestApi: NSObject {
476476

477477
}
478478

479-
// MARK: - FilePart
480-
481-
/// FilePart represents the infomartion needed to encode a file on a multipart form request
482-
public final class FilePart: NSObject {
483-
@objc let parameterName: String
484-
@objc let url: URL
485-
@objc let filename: String
486-
@objc let mimeType: String
487-
488-
@objc public init(parameterName: String, url: URL, filename: String, mimeType: String) {
489-
self.parameterName = parameterName
490-
self.url = url
491-
self.filename = filename
492-
self.mimeType = mimeType
493-
}
494-
}
495-
496479
// MARK: - Error processing
497480

498481
extension WordPressComRestApi {

WordPressKit/WordPressKit.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ FOUNDATION_EXPORT double WordPressKitVersionNumber;
66
//! Project version string for WordPressKit.
77
FOUNDATION_EXPORT const unsigned char WordPressKitVersionString[];
88

9+
#import <WordPressKit/FilePart.h>
910
#import <WordPressKit/WordPressComRESTAPIInterfacing.h>
11+
1012
#import <WordPressKit/ServiceRemoteWordPressComREST.h>
1113
#import <WordPressKit/ServiceRemoteWordPressXMLRPC.h>
1214
#import <WordPressKit/SiteServiceRemoteWordPressComREST.h>

WordPressKitTests/WordPressComRestApiTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ class WordPressComRestApiTests: XCTestCase {
295295

296296
let expect = self.expectation(description: "One callback should be invoked")
297297
let api = WordPressComRestApi(oAuthToken: "fakeToken")
298-
let filePart = FilePart(parameterName: "file", url: URL(fileURLWithPath: "/a.txt") as URL, filename: "a.txt", mimeType: "image/jpeg")
298+
let filePart = FilePart(parameterName: "file", url: URL(fileURLWithPath: "/a.txt") as URL, fileName: "a.txt", mimeType: "image/jpeg")
299299
api.multipartPOST(wordPressMediaNewEndpointPath, parameters: nil, fileParts: [filePart], success: { (_: AnyObject, _: HTTPURLResponse?) in
300300
expect.fulfill()
301301
XCTFail("This call should fail")
@@ -319,7 +319,7 @@ class WordPressComRestApiTests: XCTestCase {
319319
let mediaURL = URL(fileURLWithPath: mediaPath)
320320
let expect = self.expectation(description: "One callback should be invoked")
321321
let api = WordPressComRestApi(oAuthToken: "fakeToken")
322-
let filePart = FilePart(parameterName: "media[]", url: mediaURL as URL, filename: "test-image.jpg", mimeType: "image/jpeg")
322+
let filePart = FilePart(parameterName: "media[]", url: mediaURL as URL, fileName: "test-image.jpg", mimeType: "image/jpeg")
323323
let progress1 = api.multipartPOST(wordPressMediaNewEndpointPath, parameters: nil, fileParts: [filePart], success: { (_: AnyObject, _: HTTPURLResponse?) in
324324
XCTFail("This call should fail")
325325
}, failure: { (error, _) in

0 commit comments

Comments
 (0)