diff --git a/Package.swift b/Package.swift index 7a1c94c5d..9efe0a202 100644 --- a/Package.swift +++ b/Package.swift @@ -11,8 +11,8 @@ let package = Package( targets: [ .binaryTarget( name: "WordPressKit", - url: "https://github.com/user-attachments/files/19315257/WordPressKit.zip", - checksum: "1b4ba5cef01a64e98ffdc02a5c8ac92f550f234222bfb6abf11b4b4df94435bc" + url: "https://github.com/user-attachments/files/19339848/WordPressKit.zip", + checksum: "5bf1ff361992dccf44dfe41b0a442ee4c3c13dc0a1ce9b647a8ed1b976b5c3fc" ), ] ) diff --git a/Sources/WordPressKit/Services/ThemeServiceRemote.h b/Sources/WordPressKit/Services/ThemeServiceRemote.h index 3ee51c4af..939cdb4d0 100644 --- a/Sources/WordPressKit/Services/ThemeServiceRemote.h +++ b/Sources/WordPressKit/Services/ThemeServiceRemote.h @@ -58,6 +58,7 @@ typedef void(^ThemeServiceRemoteFailureBlock)(NSError *error); * @details Includes premium themes even if not purchased. Don't call this method if the list * you want to retrieve is for a specific blog. Use getThemesForBlogId instead. * + * @param search Search term for filtering themes. Cannot be nil. * @param freeOnly Only fetch free themes, if false all WP themes will be returned * @param page Results page to return. * @param success The success handler. Can be nil. @@ -66,6 +67,7 @@ typedef void(^ThemeServiceRemoteFailureBlock)(NSError *error); * @returns A progress object that can be used to track progress and/or cancel the task */ - (NSProgress *)getWPThemesPage:(NSInteger)page + search:(NSString *)search freeOnly:(BOOL)freeOnly success:(ThemeServiceRemoteThemesRequestSuccessBlock)success failure:(ThemeServiceRemoteFailureBlock)failure; diff --git a/Sources/WordPressKit/Services/ThemeServiceRemote.m b/Sources/WordPressKit/Services/ThemeServiceRemote.m index 97d6e60e0..496c5a77d 100644 --- a/Sources/WordPressKit/Services/ThemeServiceRemote.m +++ b/Sources/WordPressKit/Services/ThemeServiceRemote.m @@ -13,6 +13,7 @@ static NSString* const ThemeRequestNumberKey = @"number"; static NSInteger const ThemeRequestNumberValue = 50; static NSString* const ThemeRequestPageKey = @"page"; +static NSString* const ThemeRequestSearchKey = @"search"; @implementation ThemeServiceRemote @@ -98,20 +99,26 @@ - (NSProgress *)getThemeId:(NSString*)themeId } - (NSProgress *)getWPThemesPage:(NSInteger)page + search:(NSString *)search freeOnly:(BOOL)freeOnly success:(ThemeServiceRemoteThemesRequestSuccessBlock)success failure:(ThemeServiceRemoteFailureBlock)failure { NSParameterAssert(page > 0); - + NSString *requestUrl = [self pathForEndpoint:@"themes" - withVersion:WordPressComRESTAPIVersion_1_2]; - - NSDictionary *parameters = @{ThemeRequestTierKey: freeOnly ? ThemeRequestTierFreeValue : ThemeRequestTierAllValue, - ThemeRequestNumberKey: @(ThemeRequestNumberValue), - ThemeRequestPageKey: @(page), - }; - + withVersion:WordPressComRESTAPIVersion_2_0]; + + NSMutableDictionary *parameters = [@{ + ThemeRequestTierKey: freeOnly ? ThemeRequestTierFreeValue : ThemeRequestTierAllValue, + ThemeRequestNumberKey: @(ThemeRequestNumberValue), + ThemeRequestPageKey: @(page) + } mutableCopy]; + + if (search) { + parameters[ThemeRequestSearchKey] = search; + } + return [self getThemesWithRequestUrl:requestUrl page:page parameters:parameters @@ -143,9 +150,9 @@ - (NSProgress *)getThemesPage:(NSInteger)page } - (NSProgress *)getThemesForBlogId:(NSNumber *)blogId - page:(NSInteger)page - success:(ThemeServiceRemoteThemesRequestSuccessBlock)success - failure:(ThemeServiceRemoteFailureBlock)failure + page:(NSInteger)page + success:(ThemeServiceRemoteThemesRequestSuccessBlock)success + failure:(ThemeServiceRemoteFailureBlock)failure { NSParameterAssert([blogId isKindOfClass:[NSNumber class]]); NSParameterAssert(page > 0); diff --git a/Tests/WordPressKitTests/Tests/ThemeServiceRemoteTests.m b/Tests/WordPressKitTests/Tests/ThemeServiceRemoteTests.m index e0a6ac7ff..a2eda517e 100644 --- a/Tests/WordPressKitTests/Tests/ThemeServiceRemoteTests.m +++ b/Tests/WordPressKitTests/Tests/ThemeServiceRemoteTests.m @@ -196,7 +196,7 @@ - (void)testThatGetThemesWorks XCTAssertNoThrow(service = [[ThemeServiceRemote alloc] initWithWordPressComRestApi:api]); NSString *url = [service pathForEndpoint:@"themes" - withVersion:WordPressComRESTAPIVersion_1_2]; + withVersion:WordPressComRESTAPIVersion_2_0]; ThemeServiceRemoteThemesRequestSuccessBlock successBlock = ^void (NSArray *themes, BOOL hasMore, NSInteger totalThemeCount) { NSCAssert([themes count] == expectedThemes, @"Expected %ld themes to be returned", expectedThemes); @@ -224,9 +224,10 @@ - (void)testThatGetThemesWorks }]; XCTAssertNoThrow([service getWPThemesPage:1 - freeOnly:NO - success:successBlock - failure:nil]); + search:nil + freeOnly:NO + success:successBlock + failure:nil]); } - (void)testThatGetThemesForBlogIdWorks @@ -268,9 +269,9 @@ - (void)testThatGetThemesForBlogIdWorks }]; XCTAssertNoThrow([service getThemesForBlogId:blogId - page:1 - success:successBlock - failure:nil]); + page:1 + success:successBlock + failure:nil]); } - (void)testThatGetThemesForBlogIdThrowsExceptionWithoutBlogId