From 94625f2331f123c0a9f5e460935188be219c1406 Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 17 Nov 2023 11:02:35 +0100 Subject: [PATCH 1/2] Wip - Drag and drop images --- .../Gutenberg/GutenbergViewController.swift | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift index 750b8f4c25ff..0945418f8819 100644 --- a/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift +++ b/WordPress/Classes/ViewRelated/Gutenberg/GutenbergViewController.swift @@ -6,7 +6,7 @@ import WordPressFlux import Kanvas import React -class GutenbergViewController: UIViewController, PostEditor, FeaturedImageDelegate, PublishingEditor { +class GutenbergViewController: UIViewController, PostEditor, FeaturedImageDelegate, PublishingEditor, UIDropInteractionDelegate { let errorDomain: String = "GutenbergViewController.errorDomain" enum RequestHTMLReason { @@ -363,6 +363,53 @@ class GutenbergViewController: UIViewController, PostEditor, FeaturedImageDelega }, failure: { (error) in DDLogError("Error syncing JETPACK: \(String(describing: error))") }) + + let dropInteraction = UIDropInteraction(delegate: self) + view.addInteraction(dropInteraction) + } + + func saveToDisk(image: UIImage) -> URL? { + let fileName = "\(ProcessInfo.processInfo.globallyUniqueString)_file.jpg" + + guard let data = image.jpegData(compressionQuality: 0.9) else { + return nil + } + + let fileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName) + + guard (try? data.write(to: fileURL, options: [.atomic])) != nil else { + return nil + } + + return fileURL + } + + func dropInteraction(_ interaction: UIDropInteraction, canHandle session: UIDropSession) -> Bool { + return session.canLoadObjects(ofClass: UIImage.self) + } + + func dropInteraction(_ interaction: UIDropInteraction, sessionDidUpdate session: UIDropSession) -> UIDropProposal { + let dropLocation = session.location(in: view) + self.gutenberg.filesOver(coords: dropLocation) + return UIDropProposal(operation: .copy) + } + + func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) { + session.loadObjects(ofClass: UIImage.self) { items in + guard let images = items as? [UIImage] else { + return + } + let imagesURLs = images.compactMap({ self.saveToDisk(image: $0)?.absoluteString }) + self.gutenberg.filesDrop(imagesURLs) + } + } + + func dropInteraction(_ interaction: UIDropInteraction, sessionDidExit session: UIDropSession) { + self.gutenberg.filesDropOutside() + } + + func dropInteraction(_ interaction: UIDropInteraction, sessionDidEnd session: UIDropSession) { + self.gutenberg.filesDropEnded() } override func viewWillAppear(_ animated: Bool) { From 2fd15a415de89e66e03ac609cc3ad495519b463e Mon Sep 17 00:00:00 2001 From: Gerardo Date: Fri, 17 Nov 2023 11:25:50 +0100 Subject: [PATCH 2/2] Update Gutenberg ref --- Gutenberg/config.yml | 2 +- Podfile.lock | 10 +++----- WordPress/WordPress.xcodeproj/project.pbxproj | 24 +++++++++---------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/Gutenberg/config.yml b/Gutenberg/config.yml index 32d8b6f83aa4..5ef78412bb6f 100644 --- a/Gutenberg/config.yml +++ b/Gutenberg/config.yml @@ -9,6 +9,6 @@ # # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install ref: - tag: v1.108.0 + commit: 2adb610d0dc192e2e18a66c03852d37a92461cc7 github_org: wordpress-mobile repo_name: gutenberg-mobile diff --git a/Podfile.lock b/Podfile.lock index 33479798cb98..0abc3b764630 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -111,7 +111,7 @@ DEPENDENCIES: - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.3.1) - Gridicons (~> 1.2) - - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.108.0.podspec`) + - Gutenberg (from `https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-2adb610d0dc192e2e18a66c03852d37a92461cc7.podspec`) - JTAppleCalendar (~> 8.0.5) - Kanvas (~> 1.4.4) - MediaEditor (>= 1.2.2, ~> 1.2) @@ -183,16 +183,12 @@ EXTERNAL SOURCES: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 Gutenberg: - :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-v1.108.0.podspec + :podspec: https://cdn.a8c-ci.services/gutenberg-mobile/Gutenberg-2adb610d0dc192e2e18a66c03852d37a92461cc7.podspec CHECKOUT OPTIONS: FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 - Gutenberg: - :git: https://github.com/wordpress-mobile/gutenberg-mobile.git - :submodules: true - :tag: v1.100.2 SPEC CHECKSUMS: Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844 @@ -206,7 +202,7 @@ SPEC CHECKSUMS: FSInteractiveMap: a396f610f48b76cb540baa87139d056429abda86 Gifu: 416d4e38c4c2fed012f019e0a1d3ffcb58e5b842 Gridicons: 4455b9f366960121430e45997e32112ae49ffe1d - Gutenberg: dc1c9450b90706bb127f991330c8551acd5f4343 + Gutenberg: d307b15bdf6c82f499774e1f73d0491b8916fa1a JTAppleCalendar: 16c6501b22cb27520372c28b0a2e0b12c8d0cd73 Kanvas: cc027f8058de881a4ae2b5aa5f05037b6d054d08 MediaEditor: d08314cfcbfac74361071a306b4bc3a39b3356ae diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index a6fc4b5f1900..6b551493a425 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -509,10 +509,10 @@ 0CD9CCA42AD831590044A33C /* PostSearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD9CCA22AD831590044A33C /* PostSearchViewModel.swift */; }; 0CD9FB7E2AF9C4DB009D9C7A /* UIBarButtonItem+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD9FB7D2AF9C4DB009D9C7A /* UIBarButtonItem+Extensions.swift */; }; 0CD9FB7F2AF9C4DB009D9C7A /* UIBarButtonItem+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD9FB7D2AF9C4DB009D9C7A /* UIBarButtonItem+Extensions.swift */; }; - 0CD9FB8B2AFADAFE009D9C7A /* SiteMediaPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD9FB8A2AFADAFE009D9C7A /* SiteMediaPageViewController.swift */; }; - 0CD9FB8C2AFADAFE009D9C7A /* SiteMediaPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD9FB8A2AFADAFE009D9C7A /* SiteMediaPageViewController.swift */; }; 0CD9FB872AFA71B9009D9C7A /* DGCharts in Frameworks */ = {isa = PBXBuildFile; productRef = 0CD9FB862AFA71B9009D9C7A /* DGCharts */; }; 0CD9FB892AFA71C2009D9C7A /* DGCharts in Frameworks */ = {isa = PBXBuildFile; productRef = 0CD9FB882AFA71C2009D9C7A /* DGCharts */; }; + 0CD9FB8B2AFADAFE009D9C7A /* SiteMediaPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD9FB8A2AFADAFE009D9C7A /* SiteMediaPageViewController.swift */; }; + 0CD9FB8C2AFADAFE009D9C7A /* SiteMediaPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD9FB8A2AFADAFE009D9C7A /* SiteMediaPageViewController.swift */; }; 0CDEC40C2A2FAF0500BB3A91 /* DashboardBlazeCampaignsCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CDEC40B2A2FAF0500BB3A91 /* DashboardBlazeCampaignsCardView.swift */; }; 0CDEC40D2A2FAF0500BB3A91 /* DashboardBlazeCampaignsCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CDEC40B2A2FAF0500BB3A91 /* DashboardBlazeCampaignsCardView.swift */; }; 0CED95602A460F4B0020F420 /* DebugFeatureFlagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CED955F2A460F4B0020F420 /* DebugFeatureFlagsView.swift */; }; @@ -10778,7 +10778,7 @@ path = Classes; sourceTree = ""; }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { + 29B97314FDCFA39411CA2CEA = { isa = PBXGroup; children = ( 3F20FDF3276BF21000DA3CAD /* Packages */, @@ -19149,13 +19149,13 @@ bg, sk, ); - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; + mainGroup = 29B97314FDCFA39411CA2CEA; packageReferences = ( 3FF1442E266F3C2400138163 /* XCRemoteSwiftPackageReference "ScreenObject" */, 3FC2C33B26C4CF0A00C6D98F /* XCRemoteSwiftPackageReference "XCUITestHelpers" */, 17A8858B2757B97F0071FCA3 /* XCRemoteSwiftPackageReference "AutomatticAbout-swift" */, 3F3B23C02858A1B300CACE60 /* XCRemoteSwiftPackageReference "test-collector-swift" */, - 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */, + 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */, 3F338B6F289BD3040014ADC5 /* XCRemoteSwiftPackageReference "Nimble" */, 0CD9FB852AFA71B9009D9C7A /* XCRemoteSwiftPackageReference "Charts" */, ); @@ -20763,11 +20763,11 @@ files = ( ); inputPaths = ( - $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist, + "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist", ); name = "Copy Gutenberg JS"; outputFileListPaths = ( - $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist, + "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist", ); outputPaths = ( "", @@ -20938,13 +20938,13 @@ files = ( ); inputFileListPaths = ( - $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist, + "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.inputs.xcfilelist", ); inputPaths = ( ); name = "Copy Gutenberg JS"; outputFileListPaths = ( - $SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist, + "$SRCROOT/../Scripts/BuildPhases/CopyGutenbergJS.outputs.xcfilelist", ); outputPaths = ( ); @@ -30377,7 +30377,7 @@ minimumVersion = 0.3.0; }; }; - 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */ = { + 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/airbnb/lottie-ios.git"; requirement = { @@ -30458,12 +30458,12 @@ }; 3F411B6E28987E3F002513AE /* Lottie */ = { isa = XCSwiftPackageProductDependency; - package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */; + package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */; productName = Lottie; }; 3F44DD57289C379C006334CD /* Lottie */ = { isa = XCSwiftPackageProductDependency; - package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios" */; + package = 3F411B6D28987E3F002513AE /* XCRemoteSwiftPackageReference "lottie-ios.git" */; productName = Lottie; }; 3FC2C33C26C4CF0A00C6D98F /* XCUITestHelpers */ = {