Skip to content

Commit c179e9e

Browse files
committed
Add shared registry of RawBlockEditorSettingsService objects
1 parent f362632 commit c179e9e

File tree

3 files changed

+20
-25
lines changed

3 files changed

+20
-25
lines changed

WordPress/Classes/Services/RawBlockEditorSettingsService.swift

+18-8
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,32 @@ import WordPressShared
44

55
class RawBlockEditorSettingsService {
66
private let blog: Blog
7-
private let remoteAPI: WordPressOrgRestApi
87
private var isRefreshing: Bool = false
98
private var refreshTask: Task<[String: Any], Error>?
109

11-
init?(blog: Blog) {
12-
guard let remoteAPI = WordPressOrgRestApi(blog: blog) else {
13-
return nil
14-
}
15-
10+
init(blog: Blog) {
1611
self.blog = blog
17-
self.remoteAPI = remoteAPI
12+
}
13+
14+
private static var services: [TaggedManagedObjectID<Blog>: RawBlockEditorSettingsService] = [:]
15+
16+
@MainActor
17+
static func getService(forBlog blog: Blog) -> RawBlockEditorSettingsService {
18+
let objectID = TaggedManagedObjectID(blog)
19+
if let service = services[objectID] {
20+
return service
21+
}
22+
let service = RawBlockEditorSettingsService(blog: blog)
23+
services[objectID] = service
24+
return service
1825
}
1926

2027
@MainActor
2128
private func fetchSettingsFromAPI() async throws -> [String: Any] {
22-
let result = await self.remoteAPI.get(path: "/wp-block-editor/v1/settings")
29+
guard let remoteAPI = WordPressOrgRestApi(blog: blog) else {
30+
throw URLError(.unknown) // Should not happen
31+
}
32+
let result = await remoteAPI.get(path: "/wp-block-editor/v1/settings")
2333
switch result {
2434
case .success(let response):
2535
guard let dictionary = response as? [String: Any] else {

WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift

+1-7
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,6 @@ final class MySiteViewController: UIViewController, UIScrollViewDelegate, NoSite
7070
// MARK: - Dependencies
7171

7272
private let overlaysCoordinator: MySiteOverlaysCoordinator
73-
private lazy var editorSettingsService: RawBlockEditorSettingsService? = {
74-
guard let blog, RemoteFeatureFlag.newGutenberg.enabled() else { return nil }
75-
return RawBlockEditorSettingsService(blog: blog)
76-
}()
7773

7874
// TODO: (reader) factor if out of `MySiteVC` for a production version
7975
var isReaderAppModeEnabled = false
@@ -387,9 +383,7 @@ final class MySiteViewController: UIViewController, UIScrollViewDelegate, NoSite
387383
}
388384

389385
if RemoteFeatureFlag.newGutenberg.enabled() {
390-
// Update editor settings service with new blog and fetch settings
391-
editorSettingsService = RawBlockEditorSettingsService(blog: blog)
392-
editorSettingsService?.refreshSettings()
386+
RawBlockEditorSettingsService.getService(forBlog: blog).refreshSettings()
393387
}
394388
}
395389

WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift

+1-10
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,6 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
6565
BlockEditorSettingsService(blog: post.blog, coreDataStack: ContextManager.shared)
6666
}()
6767

68-
// New service for fetching raw block editor settings
69-
lazy var rawBlockEditorSettingsService: RawBlockEditorSettingsService? = {
70-
return RawBlockEditorSettingsService(blog: post.blog)
71-
}()
72-
7368
// MARK: - GutenbergKit
7469

7570
private var editorViewController: GutenbergKit.EditorViewController
@@ -354,11 +349,7 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
354349
// MARK: - Block Editor Settings
355350

356351
private func fetchBlockEditorSettings() {
357-
guard let service = rawBlockEditorSettingsService else {
358-
startEditor()
359-
return
360-
}
361-
352+
let service = RawBlockEditorSettingsService.getService(forBlog: post.blog)
362353
service.refreshSettings()
363354

364355
Task { @MainActor in

0 commit comments

Comments
 (0)