diff --git a/Modules/Package.resolved b/Modules/Package.resolved index 773acdfae160..3875a26850a9 100644 --- a/Modules/Package.resolved +++ b/Modules/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "fa20aa25a9175838313543f726c7d0e88ab8ab5d611ea8d159bc549c27b0cda7", + "originHash" : "c8293f7ef5471ef07c20aea642969adb0accf97391b54052c28317d12a327dcd", "pins" : [ { "identity" : "alamofire", @@ -149,8 +149,7 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/wordpress-mobile/GutenbergKit", "state" : { - "revision" : "df43b1d70fef11fb9035b1d9da7d4a80503c2a6f", - "version" : "0.10.1" + "revision" : "4fe41400aeb43350e7116954694c0a6072a8f26b" } }, { diff --git a/Modules/Package.swift b/Modules/Package.swift index 05537222fc35..5b14a5cb4555 100644 --- a/Modules/Package.swift +++ b/Modules/Package.swift @@ -54,7 +54,7 @@ let package = Package( .package(url: "https://github.com/wordpress-mobile/wpxmlrpc", from: "0.9.0"), .package(url: "https://github.com/wordpress-mobile/NSURL-IDN", revision: "b34794c9a3f32312e1593d4a3d120572afa0d010"), .package(url: "https://github.com/zendesk/support_sdk_ios", from: "8.0.3"), - .package(url: "https://github.com/wordpress-mobile/GutenbergKit", from: "0.10.1"), + .package(url: "https://github.com/wordpress-mobile/GutenbergKit", revision: "4fe41400aeb43350e7116954694c0a6072a8f26b"), // We can't use wordpress-rs branches nor commits here. Only tags work. .package(url: "https://github.com/Automattic/wordpress-rs", revision: "alpha-20251101"), .package( diff --git a/WordPress/Classes/Services/BlockEditorCache.swift b/WordPress/Classes/Services/BlockEditorCache.swift deleted file mode 100644 index b1566cc511af..000000000000 --- a/WordPress/Classes/Services/BlockEditorCache.swift +++ /dev/null @@ -1,50 +0,0 @@ -import Foundation -import CryptoKit -import WordPressShared -import WordPressData - -final actor BlockEditorCache { - static let shared = BlockEditorCache() - - private let rootURL: URL - private let blockSettingsURL: URL - - private init() { - rootURL = URL.cachesDirectory - .appendingPathComponent("GutenbergKit", isDirectory: true) - blockSettingsURL = rootURL - .appendingPathComponent("BlockSettings", isDirectory: true) - } - - // MARK: - Block Settings - func saveBlockSettings(_ settings: Data, for blogID: String) throws { - try FileManager.default.createDirectory(at: blockSettingsURL, withIntermediateDirectories: true) - - let fileURL = makeBlockSettingsURL(for: blogID) - try settings.write(to: fileURL) - } - - func getBlockSettings(for blogID: String) throws -> Data? { - let fileURL = makeBlockSettingsURL(for: blogID) - - guard FileManager.default.fileExists(atPath: fileURL.path) else { - return nil - } - - return try Data(contentsOf: fileURL) - } - - func deleteBlockSettings(for blogID: String) throws { - let fileURL = makeBlockSettingsURL(for: blogID) - try FileManager.default.removeItem(at: fileURL) - } - - func makeBlockSettingsURL(for blogID: String) -> URL { - return blockSettingsURL.appendingPathComponent("\(blogID).json") - } - - // MARK: - Misc - func deleteAll() throws { - try FileManager.default.removeItem(at: rootURL) - } -} diff --git a/WordPress/Classes/Services/RawBlockEditorSettingsService.swift b/WordPress/Classes/Services/RawBlockEditorSettingsService.swift deleted file mode 100644 index e4234b195fbd..000000000000 --- a/WordPress/Classes/Services/RawBlockEditorSettingsService.swift +++ /dev/null @@ -1,58 +0,0 @@ -import Foundation -import WordPressData -import WordPressKit -import WordPressShared - -final class RawBlockEditorSettingsService { - - private let blogID: String - private var refreshTask: Task? - private let dotOrgRestAPI: WordPressOrgRestApi - private var prefetchTask: Task? - - @MainActor - init(blog: Blog) { - self.dotOrgRestAPI = WordPressOrgRestApi(blog: blog)! - self.blogID = blog.locallyUniqueId - } - - private func fetchSettingsFromAPI() async throws -> Data { - let response: WordPressAPIResult = await dotOrgRestAPI.get( - path: "/wp-block-editor/v1/settings" - ) - - let data = try response.get() // Unwrap the result type - try await BlockEditorCache.shared.saveBlockSettings(data, for: blogID) - - return data - } - - /// Returns cached settings if available. If not, fetches the settings from - /// the network. - func getSettings(allowingCachedResponse: Bool = true) async throws -> Data { - // Return cached settings if available - if allowingCachedResponse, let cachedSettings = try await BlockEditorCache.shared.getBlockSettings(for: blogID) { - return cachedSettings - } - return try await fetchSettingsFromAPI() - } - - func getSettingsString(allowingCachedResponse: Bool = true) async throws -> String { - let data = try await getSettings(allowingCachedResponse: allowingCachedResponse) - guard let string = String(data: data, encoding: .utf8) else { - throw CocoaError(.fileReadCorruptFile) - } - return string - } - - func prefetchSettings() { - guard self.prefetchTask == nil else { return } - self.prefetchTask = Task { - do { - _ = try await fetchSettingsFromAPI() - } catch { - debugPrint("Failed to prefetch block editor settings: \(error)") - } - } - } -} diff --git a/WordPress/Classes/Utility/AccountHelper.swift b/WordPress/Classes/Utility/AccountHelper.swift index 1a968ef95ce4..397c5eeab2ac 100644 --- a/WordPress/Classes/Utility/AccountHelper.swift +++ b/WordPress/Classes/Utility/AccountHelper.swift @@ -111,9 +111,6 @@ import WordPressData // This is best-effort for now – eventually all of this should be async Task { do { - // Delete all cached block editor settings - try await BlockEditorCache.shared.deleteAll() - // Delete everything in the disk cache try await DiskCache().removeAll() } catch { diff --git a/WordPress/Classes/Utility/Editor/EditorConfiguration+Blog.swift b/WordPress/Classes/Utility/Editor/EditorConfiguration+Blog.swift index e226119311c7..9df95512e68c 100644 --- a/WordPress/Classes/Utility/Editor/EditorConfiguration+Blog.swift +++ b/WordPress/Classes/Utility/Editor/EditorConfiguration+Blog.swift @@ -54,6 +54,16 @@ extension EditorConfiguration { if let siteApiRoot { builder = builder.setSiteApiRoot(siteApiRoot) + if var editorSettingsEndpoint = URL(string: siteApiRoot) { + editorSettingsEndpoint.appendPathComponent("wp-block-editor/v1") + if let namespace = siteApiNamespace.first { + editorSettingsEndpoint.appendPathComponent(namespace) + } + + editorSettingsEndpoint.appendPathComponent("settings") + builder = builder.setEditorSettingsEndpoint(editorSettingsEndpoint) + } + if var editorAssetsEndpoint = URL(string: siteApiRoot) { editorAssetsEndpoint.appendPathComponent("wpcom/v2/") if let namespace = siteApiNamespace.first { diff --git a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift index 3b3209f02140..60b6cb0ecc29 100644 --- a/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/My Site/MySiteViewController.swift @@ -357,8 +357,6 @@ final class MySiteViewController: UIViewController, UIScrollViewDelegate, NoSite let configuration = EditorConfiguration(blog: blog) GutenbergKit.EditorViewController.warmup(configuration: configuration) - - RawBlockEditorSettingsService(blog: blog).prefetchSettings() } // MARK: - Main Blog diff --git a/WordPress/Classes/ViewRelated/Comments/Controllers/Editor/CommentGutenbergEditorViewController.swift b/WordPress/Classes/ViewRelated/Comments/Controllers/Editor/CommentGutenbergEditorViewController.swift index f37e02d0f65c..4fce5b87c819 100644 --- a/WordPress/Classes/ViewRelated/Comments/Controllers/Editor/CommentGutenbergEditorViewController.swift +++ b/WordPress/Classes/ViewRelated/Comments/Controllers/Editor/CommentGutenbergEditorViewController.swift @@ -89,7 +89,7 @@ extension CommentGutenbergEditorViewController: GutenbergKit.EditorViewControlle // Do nothing } - func editor(_ viewController: GutenbergKit.EditorViewController, didLogMessage message: String, level: GutenbergKit.LogLevel) { + func editor(_ viewController: GutenbergKit.EditorViewController, didLogMessage message: String, level: GutenbergKit.EditorLogLevel) { // Do nothing } @@ -108,4 +108,8 @@ extension CommentGutenbergEditorViewController: GutenbergKit.EditorViewControlle func editor(_ viewController: GutenbergKit.EditorViewController, didCloseModalDialog dialogType: String) { // Do nothing } + + func editor(_ viewController: GutenbergKit.EditorViewController, didLogNetworkRequest request: GutenbergKit.RecordedNetworkRequest) { + // Do nothing + } } diff --git a/WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift b/WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift index 62d4625ab5b0..b2a86a4ad6a0 100644 --- a/WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/NewGutenberg/NewGutenbergViewController.swift @@ -53,7 +53,6 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor } struct EditorDependencies { - let settings: String? let didLoadCookies: Bool } @@ -100,14 +99,6 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor let navigationBarManager: PostEditorNavigationBarManager - // MARK: - Private variables - - // TODO: reimplemet -// internal private(set) var contentInfo: ContentInfo? - lazy var editorSettingsService: BlockEditorSettingsService? = { - BlockEditorSettingsService(blog: post.blog, coreDataStack: ContextManager.shared) - }() - // MARK: - GutenbergKit private var editorViewController: GutenbergKit.EditorViewController @@ -147,8 +138,6 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor func setHTML(_ html: String) {} func getHTML() -> String { post.content ?? "" } - private let blockEditorSettingsService: RawBlockEditorSettingsService - // MARK: - Initializers required convenience init( post: AbstractPost, @@ -190,8 +179,6 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor mediaPicker: MediaPickerController(blog: post.blog) ) - self.blockEditorSettingsService = RawBlockEditorSettingsService(blog: post.blog) - super.init(nibName: nil, bundle: nil) self.editorViewController.delegate = self @@ -269,7 +256,7 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor case .loadingDependencies: preconditionFailure("Dependencies should not still be loading") case .loadingCancelled: preconditionFailure("Dependency loading should not be cancelled") case .dependencyError(let error): self.showEditorError(error) - case .dependenciesReady(let dependencies): try await self.startEditor(settings: dependencies.settings) + case .dependenciesReady: try await self.startEditor() case .started: preconditionFailure("The editor should not already be started") } } catch { @@ -385,23 +372,18 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor } self.editorState = .loadingDependencies(Task { - do { - let dependencies = try await fetchEditorDependencies() - self.editorState = .dependenciesReady(dependencies) - } catch { - self.editorState = .dependencyError(error) - } + let dependencies = await fetchEditorDependencies() + self.editorState = .dependenciesReady(dependencies) }) } @MainActor - func startEditor(settings: String?) async throws { + func startEditor() async throws { guard case .dependenciesReady = self.editorState else { preconditionFailure("`startEditor` should only be called when the editor is in the `.dependenciesReady` state.") } let updatedConfiguration = self.editorViewController.configuration.toBuilder() - .apply(settings) { $0.setEditorSettings($1) } .setTitle(post.postTitle ?? "") .setContent(post.content ?? "") .setNativeInserterEnabled(FeatureFlag.nativeBlockInserter.enabled) @@ -481,18 +463,11 @@ class NewGutenbergViewController: UIViewController, PostEditor, PublishingEditor } // MARK: - Editor Setup - private func fetchEditorDependencies() async throws -> EditorDependencies { - let settings: String? - do { - settings = try await blockEditorSettingsService.getSettingsString(allowingCachedResponse: true) - } catch { - DDLogError("Failed to fetch editor settings: \(error)") - settings = nil - } + // TODO: refactor + private func fetchEditorDependencies() async -> EditorDependencies { let loaded = await loadAuthenticationCookiesAsync() - - return EditorDependencies(settings: settings, didLoadCookies: loaded) + return EditorDependencies(didLoadCookies: loaded) } private func loadAuthenticationCookiesAsync() async -> Bool { @@ -573,7 +548,11 @@ extension NewGutenbergViewController: GutenbergKit.EditorViewControllerDelegate } } - func editor(_ viewController: GutenbergKit.EditorViewController, didLogMessage message: String, level: GutenbergKit.LogLevel) { + func editor(_ viewController: GutenbergKit.EditorViewController, didLogMessage message: String, level: GutenbergKit.EditorLogLevel) { + // Do nothing + } + + func editor(_ viewController: GutenbergKit.EditorViewController, didLogNetworkRequest request: GutenbergKit.RecordedNetworkRequest) { // Do nothing }