Skip to content

Commit 31e7707

Browse files
committed
Revert "Integrate new GBK changes"
This reverts commit ff1bee1.
1 parent 31e8b81 commit 31e7707

File tree

7 files changed

+148
-12
lines changed

7 files changed

+148
-12
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import Foundation
2+
import CryptoKit
3+
import WordPressShared
4+
import WordPressData
5+
6+
final actor BlockEditorCache {
7+
static let shared = BlockEditorCache()
8+
9+
private let rootURL: URL
10+
private let blockSettingsURL: URL
11+
12+
private init() {
13+
rootURL = URL.cachesDirectory
14+
.appendingPathComponent("GutenbergKit", isDirectory: true)
15+
blockSettingsURL = rootURL
16+
.appendingPathComponent("BlockSettings", isDirectory: true)
17+
}
18+
19+
// MARK: - Block Settings
20+
func saveBlockSettings(_ settings: Data, for blogID: String) throws {
21+
try FileManager.default.createDirectory(at: blockSettingsURL, withIntermediateDirectories: true)
22+
23+
let fileURL = makeBlockSettingsURL(for: blogID)
24+
try settings.write(to: fileURL)
25+
}
26+
27+
func getBlockSettings(for blogID: String) throws -> Data? {
28+
let fileURL = makeBlockSettingsURL(for: blogID)
29+
30+
guard FileManager.default.fileExists(atPath: fileURL.path) else {
31+
return nil
32+
}
33+
34+
return try Data(contentsOf: fileURL)
35+
}
36+
37+
func deleteBlockSettings(for blogID: String) throws {
38+
let fileURL = makeBlockSettingsURL(for: blogID)
39+
try FileManager.default.removeItem(at: fileURL)
40+
}
41+
42+
func makeBlockSettingsURL(for blogID: String) -> URL {
43+
return blockSettingsURL.appendingPathComponent("\(blogID).json")
44+
}
45+
46+
// MARK: - Misc
47+
func deleteAll() throws {
48+
try FileManager.default.removeItem(at: rootURL)
49+
}
50+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import Foundation
2+
import WordPressData
3+
import WordPressKit
4+
import WordPressShared
5+
6+
final class RawBlockEditorSettingsService {
7+
8+
private let blogID: String
9+
private var refreshTask: Task<Data, Error>?
10+
private let dotOrgRestAPI: WordPressOrgRestApi
11+
private var prefetchTask: Task<Void, Never>?
12+
13+
@MainActor
14+
init(blog: Blog) {
15+
self.dotOrgRestAPI = WordPressOrgRestApi(blog: blog)!
16+
self.blogID = blog.locallyUniqueId
17+
}
18+
19+
private func fetchSettingsFromAPI() async throws -> Data {
20+
let response: WordPressAPIResult<Data, WordPressOrgRestApiError> = await dotOrgRestAPI.get(
21+
path: "/wp-block-editor/v1/settings"
22+
)
23+
24+
let data = try response.get() // Unwrap the result type
25+
try await BlockEditorCache.shared.saveBlockSettings(data, for: blogID)
26+
27+
return data
28+
}
29+
30+
/// Returns cached settings if available. If not, fetches the settings from
31+
/// the network.
32+
func getSettings(allowingCachedResponse: Bool = true) async throws -> Data {
33+
// Return cached settings if available
34+
if allowingCachedResponse, let cachedSettings = try await BlockEditorCache.shared.getBlockSettings(for: blogID) {
35+
return cachedSettings
36+
}
37+
return try await fetchSettingsFromAPI()
38+
}
39+
40+
func getSettingsString(allowingCachedResponse: Bool = true) async throws -> String {
41+
let data = try await getSettings(allowingCachedResponse: allowingCachedResponse)
42+
guard let string = String(data: data, encoding: .utf8) else {
43+
throw CocoaError(.fileReadCorruptFile)
44+
}
45+
return string
46+
}
47+
48+
func prefetchSettings() {
49+
guard self.prefetchTask == nil else { return }
50+
self.prefetchTask = Task {
51+
do {
52+
_ = try await fetchSettingsFromAPI()
53+
} catch {
54+
debugPrint("Failed to prefetch block editor settings: \(error)")
55+
}
56+
}
57+
}
58+
}

WordPress/Classes/Utility/AccountHelper.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ import WordPressData
111111
// This is best-effort for now – eventually all of this should be async
112112
Task {
113113
do {
114+
// Delete all cached block editor settings
115+
try await BlockEditorCache.shared.deleteAll()
116+
114117
// Delete everything in the disk cache
115118
try await DiskCache().removeAll()
116119
} catch {

WordPress/Classes/Utility/Editor/EditorConfiguration+Blog.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,7 @@ extension EditorConfiguration {
6161
}
6262

6363
editorAssetsEndpoint.appendPathComponent("editor-assets")
64-
builder = builder.setEditorAssetsEndpoint(editorAssetsEndpoint.appending(queryItems: [
65-
URLQueryItem(name: "exclude", value: "core,gutenberg")
66-
]))
64+
builder = builder.setEditorAssetsEndpoint(editorAssetsEndpoint)
6765
}
6866
}
6967

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,8 @@ final class MySiteViewController: UIViewController, UIScrollViewDelegate, NoSite
357357

358358
let configuration = EditorConfiguration(blog: blog)
359359
GutenbergKit.EditorViewController.warmup(configuration: configuration)
360+
361+
RawBlockEditorSettingsService(blog: blog).prefetchSettings()
360362
}
361363

362364
// MARK: - Main Blog

WordPress/Classes/ViewRelated/Comments/Controllers/Editor/CommentGutenbergEditorViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ extension CommentGutenbergEditorViewController: GutenbergKit.EditorViewControlle
8989
// Do nothing
9090
}
9191

92-
func editor(_ viewController: GutenbergKit.EditorViewController, didLogMessage message: String, level: GutenbergKit.EditorLogLevel) {
92+
func editor(_ viewController: GutenbergKit.EditorViewController, didLogMessage message: String, level: GutenbergKit.LogLevel) {
9393
// Do nothing
9494
}
9595

WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
5353
}
5454

5555
struct EditorDependencies {
56+
let settings: String?
5657
let didLoadCookies: Bool
5758
}
5859

@@ -99,6 +100,14 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
99100

100101
let navigationBarManager: PostEditorNavigationBarManager
101102

103+
// MARK: - Private variables
104+
105+
// TODO: reimplemet
106+
// internal private(set) var contentInfo: ContentInfo?
107+
lazy var editorSettingsService: BlockEditorSettingsService? = {
108+
BlockEditorSettingsService(blog: post.blog, coreDataStack: ContextManager.shared)
109+
}()
110+
102111
// MARK: - GutenbergKit
103112

104113
private var editorViewController: GutenbergKit.EditorViewController
@@ -138,6 +147,8 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
138147
func setHTML(_ html: String) {}
139148
func getHTML() -> String { post.content ?? "" }
140149

150+
private let blockEditorSettingsService: RawBlockEditorSettingsService
151+
141152
// MARK: - Initializers
142153
required convenience init(
143154
post: AbstractPost,
@@ -179,6 +190,8 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
179190
mediaPicker: MediaPickerController(blog: post.blog)
180191
)
181192

193+
self.blockEditorSettingsService = RawBlockEditorSettingsService(blog: post.blog)
194+
182195
super.init(nibName: nil, bundle: nil)
183196

184197
self.editorViewController.delegate = self
@@ -256,7 +269,7 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
256269
case .loadingDependencies: preconditionFailure("Dependencies should not still be loading")
257270
case .loadingCancelled: preconditionFailure("Dependency loading should not be cancelled")
258271
case .dependencyError(let error): self.showEditorError(error)
259-
case .dependenciesReady(let dependencies): try await self.startEditor()
272+
case .dependenciesReady(let dependencies): try await self.startEditor(settings: dependencies.settings)
260273
case .started: preconditionFailure("The editor should not already be started")
261274
}
262275
} catch {
@@ -372,18 +385,23 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
372385
}
373386

374387
self.editorState = .loadingDependencies(Task {
375-
let dependencies = await fetchEditorDependencies()
376-
self.editorState = .dependenciesReady(dependencies)
388+
do {
389+
let dependencies = try await fetchEditorDependencies()
390+
self.editorState = .dependenciesReady(dependencies)
391+
} catch {
392+
self.editorState = .dependencyError(error)
393+
}
377394
})
378395
}
379396

380397
@MainActor
381-
func startEditor() async throws {
398+
func startEditor(settings: String?) async throws {
382399
guard case .dependenciesReady = self.editorState else {
383400
preconditionFailure("`startEditor` should only be called when the editor is in the `.dependenciesReady` state.")
384401
}
385402

386403
let updatedConfiguration = self.editorViewController.configuration.toBuilder()
404+
.apply(settings) { $0.setEditorSettings($1) }
387405
.setTitle(post.postTitle ?? "")
388406
.setContent(post.content ?? "")
389407
.setNativeInserterEnabled(FeatureFlag.nativeBlockInserter.enabled)
@@ -463,11 +481,18 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor
463481
}
464482

465483
// MARK: - Editor Setup
484+
private func fetchEditorDependencies() async throws -> EditorDependencies {
485+
let settings: String?
486+
do {
487+
settings = try await blockEditorSettingsService.getSettingsString(allowingCachedResponse: true)
488+
} catch {
489+
DDLogError("Failed to fetch editor settings: \(error)")
490+
settings = nil
491+
}
466492

467-
// TODO: refactor
468-
private func fetchEditorDependencies() async -> EditorDependencies {
469493
let loaded = await loadAuthenticationCookiesAsync()
470-
return EditorDependencies(didLoadCookies: loaded)
494+
495+
return EditorDependencies(settings: settings, didLoadCookies: loaded)
471496
}
472497

473498
private func loadAuthenticationCookiesAsync() async -> Bool {
@@ -548,7 +573,7 @@ extension NewGutenbergViewController: GutenbergKit.EditorViewControllerDelegate
548573
}
549574
}
550575

551-
func editor(_ viewController: GutenbergKit.EditorViewController, didLogMessage message: String, level: GutenbergKit.EditorLogLevel) {
576+
func editor(_ viewController: GutenbergKit.EditorViewController, didLogMessage message: String, level: GutenbergKit.LogLevel) {
552577
// Do nothing
553578
}
554579

0 commit comments

Comments
 (0)