diff --git a/Sources/WordPressData/Objective-C/PostHelper.m b/Sources/WordPressData/Objective-C/PostHelper.m index a63d4df433ca..ff63b31f1e39 100644 --- a/Sources/WordPressData/Objective-C/PostHelper.m +++ b/Sources/WordPressData/Objective-C/PostHelper.m @@ -7,6 +7,10 @@ @import WordPressShared; @import NSObject_SafeExpectations; +PostServiceType const PostServiceTypePost = @"post"; +PostServiceType const PostServiceTypePage = @"page"; +PostServiceType const PostServiceTypeAny = @"any"; + @implementation PostHelper + (void)updatePost:(AbstractPost *)post withRemotePost:(RemotePost *)remotePost inContext:(NSManagedObjectContext *)managedObjectContext { diff --git a/Sources/WordPressData/Objective-C/include/PostHelper.h b/Sources/WordPressData/Objective-C/include/PostHelper.h index b4b40e7e2cf4..e43bd3c24bdc 100644 --- a/Sources/WordPressData/Objective-C/include/PostHelper.h +++ b/Sources/WordPressData/Objective-C/include/PostHelper.h @@ -1,8 +1,12 @@ #import #import -#import -@class AbstractPost, RemotePost; +@class AbstractPost, RemotePost, Post, Blog; + +typedef NSString * PostServiceType NS_TYPED_ENUM; +extern PostServiceType const PostServiceTypePost; +extern PostServiceType const PostServiceTypePage; +extern PostServiceType const PostServiceTypeAny; NS_ASSUME_NONNULL_BEGIN diff --git a/Sources/WordPressData/WordPressData.h b/Sources/WordPressData/WordPressData.h index be39469fa89a..0bf76552c059 100644 --- a/Sources/WordPressData/WordPressData.h +++ b/Sources/WordPressData/WordPressData.h @@ -15,8 +15,6 @@ FOUNDATION_EXPORT const unsigned char WordPressDataVersionString[]; #import #import #import -#import -#import #import #import diff --git a/Tests/KeystoneTests/Tests/Reader/ReaderReblogActionTests.swift b/Tests/KeystoneTests/Tests/Reader/ReaderReblogActionTests.swift index 5c45e2660077..0b25c1768f8f 100644 --- a/Tests/KeystoneTests/Tests/Reader/ReaderReblogActionTests.swift +++ b/Tests/KeystoneTests/Tests/Reader/ReaderReblogActionTests.swift @@ -12,16 +12,13 @@ class MockReblogPresenter: ReaderReblogPresenter { class ReblogTestCase: CoreDataTestCase { var readerPost: ReaderPost? - var postService: PostService? override func setUp() { readerPost = ReaderPost(context: self.mainContext) - postService = PostService(managedObjectContext: self.mainContext) } override func tearDown() { readerPost = nil - postService = nil } } @@ -29,7 +26,7 @@ class ReaderReblogActionTests: ReblogTestCase { func testExecuteAction() { // Given - let presenter = MockReblogPresenter(postService: postService!) + let presenter = MockReblogPresenter() presenter.presentReblogExpectation = expectation(description: "presentBlog was called") let action = ReaderReblogAction(coreDataStack: contextManager, presenter: presenter) let controller = UIViewController() @@ -53,7 +50,7 @@ class ReblogPresenterTests: ReblogTestCase { let draftPosts = NSFetchRequest(entityName: "Post") draftPosts.predicate = NSPredicate(format: "status = %@", Post.Status.draft.rawValue) try XCTAssertEqual(mainContext.count(for: draftPosts), 0) - let presenter = ReaderReblogPresenter(postService: postService!) + let presenter = ReaderReblogPresenter() // When presenter.presentReblog(coreDataStack: contextManager, readerPost: readerPost!, origin: UIViewController()) // Then @@ -65,7 +62,7 @@ class ReblogPresenterTests: ReblogTestCase { for _ in 1...2 { BlogBuilder(contextManager.mainContext).isHostedAtWPcom().withAnAccount().build() } - let presenter = ReaderReblogPresenter(postService: postService!) + let presenter = ReaderReblogPresenter() let origin = MockViewController() origin.presentExpectation = expectation(description: "blog selector is presented") // When diff --git a/WordPress/Classes/Services/PostService+Likes.swift b/WordPress/Classes/Services/PostService+Likes.swift index 0eb8a537ec65..3c8a611ed42b 100644 --- a/WordPress/Classes/Services/PostService+Likes.swift +++ b/WordPress/Classes/Services/PostService+Likes.swift @@ -1,6 +1,16 @@ import WordPressData import WordPressKit +final class PostService { + let managedObjectContext: NSManagedObjectContext + let postServiceRemoteFactory: PostServiceRemoteFactory + + init(managedObjectContext: NSManagedObjectContext, postServiceRemoteFactory: PostServiceRemoteFactory = PostServiceRemoteFactory()) { + self.managedObjectContext = managedObjectContext + self.postServiceRemoteFactory = postServiceRemoteFactory + } +} + extension PostService { /** diff --git a/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemAbstractPostsViewController.h b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemAbstractPostsViewController.h index 876dd4aad0a1..c2e85af6a099 100644 --- a/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemAbstractPostsViewController.h +++ b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemAbstractPostsViewController.h @@ -6,11 +6,11 @@ NS_ASSUME_NONNULL_BEGIN @end -@class PostServiceSyncOptions; +@class MenuPostServiceSyncOptions; @protocol MenuItemSourcePostAbstractViewSubclass - (Class)entityClass; -- (PostServiceSyncOptions *)syncOptions; +- (MenuPostServiceSyncOptions *)syncOptions; @end NS_ASSUME_NONNULL_END diff --git a/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemAbstractPostsViewController.m b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemAbstractPostsViewController.m index 7c92ccca1c27..979379c5ef05 100644 --- a/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemAbstractPostsViewController.m +++ b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemAbstractPostsViewController.m @@ -1,5 +1,6 @@ #import "MenuItemAbstractPostsViewController.h" -@import WordPressData; +#import "MenuPostService.h" +#import "MenuPostServiceOptions.h" @import WordPressKit; @interface MenuItemAbstractPostsViewController () @@ -54,8 +55,8 @@ - (void)syncPosts [self showLoadingSourcesIndicatorIfEmpty]; self.additionalPostsAvailableForSync = YES; - PostService *service = [[PostService alloc] initWithManagedObjectContext:[self managedObjectContext]]; - PostServiceSyncOptions *options = [self syncOptions]; + MenuPostService *service = [[MenuPostService alloc] initWithManagedObjectContext:[self managedObjectContext]]; + MenuPostServiceSyncOptions *options = [self syncOptions]; [service syncPostsOfType:[self sourceItemType] withOptions:options forBlog:[self blog] @@ -110,15 +111,15 @@ - (Class)entityClass return nil; } -- (PostServiceSyncOptions *)syncOptions +- (MenuPostServiceSyncOptions *)syncOptions { - PostServiceSyncOptions *options = [[PostServiceSyncOptions alloc] init]; + MenuPostServiceSyncOptions *options = [[MenuPostServiceSyncOptions alloc] init]; options.statuses = @[PostStatusPublish, PostStatusPrivate]; options.number = @(PostServiceDefaultNumberToSync); return options; } -- (void)didFinishSyncingPosts:(NSArray *)posts options:(PostServiceSyncOptions *)options +- (void)didFinishSyncingPosts:(NSArray *)posts options:(MenuPostServiceSyncOptions *)options { self.isSyncing = NO; if (posts) { @@ -143,8 +144,8 @@ - (void)scrollingWillDisplayEndOfTableView:(UITableView *)tableView self.isSyncingAdditionalPosts = YES; [self showLoadingSourcesIndicator]; - PostService *service = [[PostService alloc] initWithManagedObjectContext:[self managedObjectContext]]; - PostServiceSyncOptions *options = [self syncOptions]; + MenuPostService *service = [[MenuPostService alloc] initWithManagedObjectContext:[self managedObjectContext]]; + MenuPostServiceSyncOptions *options = [self syncOptions]; options.offset = @(self.resultsController.fetchedObjects.count); [service syncPostsOfType:[self sourceItemType] withOptions:options @@ -202,8 +203,8 @@ - (void)searchBarInputChangeDetectedForRemoteResultsUpdateWithText:(NSString *)s }; DDLogDebug(@"MenuItemSourcePostView: Searching posts via PostService"); - PostService *service = [[PostService alloc] initWithManagedObjectContext:[self managedObjectContext]]; - PostServiceSyncOptions *options = [self syncOptions]; + MenuPostService *service = [[MenuPostService alloc] initWithManagedObjectContext:[self managedObjectContext]]; + MenuPostServiceSyncOptions *options = [self syncOptions]; options.search = searchText; [service syncPostsOfType:[self sourceItemType] withOptions:options diff --git a/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemPagesViewController.m b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemPagesViewController.m index 7f04d25f2550..2416f036c331 100644 --- a/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemPagesViewController.m +++ b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuItemPagesViewController.m @@ -1,6 +1,6 @@ #import "MenuItemPagesViewController.h" #import "WordPress-Swift.h" -@import WordPressData; +#import "MenuPostServiceOptions.h" @interface MenuItemAbstractPostsViewController () @end @@ -31,9 +31,9 @@ - (Class)entityClass return [Page class]; } -- (PostServiceSyncOptions *)syncOptions +- (MenuPostServiceSyncOptions *)syncOptions { - PostServiceSyncOptions *options = [super syncOptions]; + MenuPostServiceSyncOptions *options = [super syncOptions]; options.order = PostServiceResultsOrderAscending; options.orderBy = PostServiceResultsOrderingByTitle; return options; diff --git a/Sources/WordPressData/Objective-C/include/PostService.h b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostService.h similarity index 84% rename from Sources/WordPressData/Objective-C/include/PostService.h rename to WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostService.h index c944c8c7b53f..cc48c57d446d 100644 --- a/Sources/WordPressData/Objective-C/include/PostService.h +++ b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostService.h @@ -1,5 +1,6 @@ #import -#import + +@import WordPressData; @class AbstractPost; @class Blog; @@ -8,21 +9,16 @@ @class RemotePost; @class RemoteUser; @class PostServiceRemoteFactory; -@class PostServiceSyncOptions; +@class MenuPostServiceSyncOptions; NS_ASSUME_NONNULL_BEGIN typedef void(^PostServiceSyncSuccess)(NSArray * _Nullable posts); typedef void(^PostServiceSyncFailure)(NSError * _Nullable error); -typedef NSString * PostServiceType NS_TYPED_ENUM; -extern PostServiceType const PostServiceTypePost; -extern PostServiceType const PostServiceTypePage; -extern PostServiceType const PostServiceTypeAny; extern const NSUInteger PostServiceDefaultNumberToSync; - -@interface PostService : LocalCoreDataService +@interface MenuPostService : LocalCoreDataService // This is public so it can be accessed from Swift extensions. @property (nonnull, strong, nonatomic) PostServiceRemoteFactory *postServiceRemoteFactory; @@ -59,7 +55,7 @@ extern const NSUInteger PostServiceDefaultNumberToSync; @param failure A failure block */ - (void)syncPostsOfType:(PostServiceType)postType - withOptions:(PostServiceSyncOptions *)options + withOptions:(MenuPostServiceSyncOptions *)options forBlog:(Blog *)blog success:(PostServiceSyncSuccess)success failure:(PostServiceSyncFailure)failure; diff --git a/Sources/WordPressData/Objective-C/PostService.m b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostService.m similarity index 91% rename from Sources/WordPressData/Objective-C/PostService.m rename to WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostService.m index 529cd0db0d1f..7513d18963b8 100644 --- a/Sources/WordPressData/Objective-C/PostService.m +++ b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostService.m @@ -1,24 +1,16 @@ #import "Blog.h" -#import "PostService.h" -#import "PostServiceOptions.h" -#import "Media.h" -#import "WordPressData-Swift.h" +#import "MenuPostService.h" +#import "MenuPostServiceOptions.h" #import "PostHelper.h" @import WordPressKit; @import WordPressShared; +@import WordPressData; -PostServiceType const PostServiceTypePost = @"post"; -PostServiceType const PostServiceTypePage = @"page"; -PostServiceType const PostServiceTypeAny = @"any"; NSString * const PostServiceErrorDomain = @"PostServiceErrorDomain"; const NSUInteger PostServiceDefaultNumberToSync = 40; -@interface PostService () - -@end - -@implementation PostService +@implementation MenuPostService - (instancetype)initWithManagedObjectContext:(NSManagedObjectContext *)context { return [self initWithManagedObjectContext:context @@ -46,7 +38,7 @@ - (void)syncPostsOfType:(PostServiceType)postType } - (void)syncPostsOfType:(PostServiceType)postType - withOptions:(PostServiceSyncOptions *)options + withOptions:(MenuPostServiceSyncOptions *)options forBlog:(Blog *)blog success:(PostServiceSyncSuccess)success failure:(PostServiceSyncFailure)failure @@ -61,7 +53,7 @@ - (void)syncPostsOfType:(PostServiceType)postType } - (void)syncPostsOfType:(PostServiceType)postType - withOptions:(PostServiceSyncOptions *)options + withOptions:(MenuPostServiceSyncOptions *)options forBlog:(Blog *)blog loadedPosts:(NSMutableArray *)loadedPosts syncAll:(BOOL)syncAll @@ -128,7 +120,7 @@ - (void)syncPostsOfType:(PostServiceType)postType #pragma mark - Helpers - (NSDictionary *)remoteSyncParametersDictionaryForRemote:(nonnull id )remote - withOptions:(nonnull PostServiceSyncOptions *)options + withOptions:(nonnull MenuPostServiceSyncOptions *)options { return [remote dictionaryWithRemoteOptions:options]; } diff --git a/Sources/WordPressData/Objective-C/include/PostServiceOptions.h b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostServiceOptions.h similarity index 90% rename from Sources/WordPressData/Objective-C/include/PostServiceOptions.h rename to WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostServiceOptions.h index d597b5a1b50c..049fad40da22 100644 --- a/Sources/WordPressData/Objective-C/include/PostServiceOptions.h +++ b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostServiceOptions.h @@ -1,13 +1,13 @@ @import WordPressKitObjC; /** - @class PostServiceSyncOptions + @class MenuPostServiceSyncOptions @brief An object of options and paramters for specific filtering and syncing of posts. See each remote API parameters for specifics regarding default values and limits. WP.com/REST Jetpack: https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/posts/ XML-RPC: https://codex.wordpress.org/XML-RPC_WordPress_API/Posts */ -@interface PostServiceSyncOptions : NSObject +@interface MenuPostServiceSyncOptions : NSObject /** When set to true previously synced AbstractPosts matching statuses and authorID will be purged while updating. diff --git a/Sources/WordPressData/Objective-C/PostServiceOptions.m b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostServiceOptions.m similarity index 62% rename from Sources/WordPressData/Objective-C/PostServiceOptions.m rename to WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostServiceOptions.m index 9dc0e8cf8b1f..3a473bb61d68 100644 --- a/Sources/WordPressData/Objective-C/PostServiceOptions.m +++ b/WordPress/Classes/ViewRelated/Menus/Controllers/MenuPostServiceOptions.m @@ -1,6 +1,6 @@ -#import "PostServiceOptions.h" +#import "MenuPostServiceOptions.h" -@implementation PostServiceSyncOptions +@implementation MenuPostServiceSyncOptions - (instancetype)init { diff --git a/WordPress/Classes/ViewRelated/Post/Controllers/AbstractPostListViewController.swift b/WordPress/Classes/ViewRelated/Post/Controllers/AbstractPostListViewController.swift index 7206c7f8c9ca..2a54bce6016a 100644 --- a/WordPress/Classes/ViewRelated/Post/Controllers/AbstractPostListViewController.swift +++ b/WordPress/Classes/ViewRelated/Post/Controllers/AbstractPostListViewController.swift @@ -508,7 +508,7 @@ class AbstractPostListViewController: UIViewController, } @objc func numberOfPostsPerSync() -> UInt { - return PostServiceDefaultNumberToSync + return 40 } // MARK: - WPContentSyncHelperDelegate diff --git a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderPostActions/ReaderReblogPresenter.swift b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderPostActions/ReaderReblogPresenter.swift index d43b8da4908d..8dc9a525e33f 100644 --- a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderPostActions/ReaderReblogPresenter.swift +++ b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderPostActions/ReaderReblogPresenter.swift @@ -4,7 +4,6 @@ import WordPressUI /// Presents the appropriate reblog scene, depending on the number of available sites class ReaderReblogPresenter { - private let postService: PostService private struct NoSitesConfiguration { static let noSitesTitle = NSLocalizedString( @@ -26,16 +25,6 @@ class ReaderReblogPresenter { comment: "Back button title.") } - init(postService: PostService? = nil) { - - // fallback for self.postService - func makePostService() -> PostService { - let context = ContextManager.shared.mainContext - return PostService(managedObjectContext: context) - } - self.postService = postService ?? makePostService() - } - /// Presents the reblog screen(s) func presentReblog(coreDataStack: CoreDataStack, readerPost: ReaderPost, diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index ad4234b4cade..fa0d1ff5d5f5 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -1178,8 +1178,6 @@ "Objective-C/include/LocalCoreDataService.h", "Objective-C/include/Media.h", "Objective-C/include/PostHelper.h", - "Objective-C/include/PostService.h", - "Objective-C/include/PostServiceOptions.h", "Objective-C/include/ReaderPost.h", "Objective-C/include/WPAccount.h", WordPressData.h,