From 8dbd72f6414e779030dd3793f5985ea61c58b75f Mon Sep 17 00:00:00 2001 From: Chris Hocking Date: Sun, 6 Aug 2023 01:01:23 +1000 Subject: [PATCH] We now base64 encode the Gyroflow Project - This prevents FCPX from doing HTML decoding on the text. --- Source/Gyroflow/Plugin/GyroflowPlugIn.m | 58 +++++++++++++++++++++---- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/Source/Gyroflow/Plugin/GyroflowPlugIn.m b/Source/Gyroflow/Plugin/GyroflowPlugIn.m index 8a797650..b7a2bb15 100644 --- a/Source/Gyroflow/Plugin/GyroflowPlugIn.m +++ b/Source/Gyroflow/Plugin/GyroflowPlugIn.m @@ -1261,7 +1261,18 @@ - (BOOL)pluginState:(NSData**)pluginState //--------------------------------------------------------- NSString *gyroflowData; [paramGetAPI getStringParameterValue:&gyroflowData fromParameter:kCB_GyroflowProjectData]; - params.gyroflowData = gyroflowData; + + //--------------------------------------------------------- + // If the Gyroflow Project data is base64 encoded, try + // to decode it first, otherwise pass the original string: + //--------------------------------------------------------- + NSData *base64EncodedData = [[NSData alloc] initWithBase64EncodedString:gyroflowData options:0]; + if (base64EncodedData != nil) { + NSString *decodedGyroflowData = [[NSString alloc] initWithData:base64EncodedData encoding:NSUTF8StringEncoding]; + params.gyroflowData = decodedGyroflowData; + } else { + params.gyroflowData = gyroflowData; + } //--------------------------------------------------------- // FOV: @@ -2071,7 +2082,7 @@ -(void)buttonSettings { suppressSuccessfullyImported.enabled = YES; suppressSuccessfullyImported.state = [self boolToControlState:[userDefaults boolForKey:@"suppressSuccessfullyImported"]]; [disableAlertSubMenu addItem:suppressSuccessfullyImported]; - + //--------------------------------------------------------- // Successfully Reloaded: //--------------------------------------------------------- @@ -2262,6 +2273,16 @@ - (void)buttonExportGyroflowProject { return; } + //--------------------------------------------------------- + // If the Gyroflow Project is base64 encoded, try to + // decode it first: + //--------------------------------------------------------- + NSData *base64EncodedData = [[NSData alloc] initWithBase64EncodedString:gyroflowProjectData options:0]; + if (base64EncodedData != nil) { + NSString *decodedGyroflowData = [[NSString alloc] initWithData:base64EncodedData encoding:NSUTF8StringEncoding]; + gyroflowProjectData = [NSString stringWithString:decodedGyroflowData]; + } + //--------------------------------------------------------- // Get the existing Gyroflow Project Path: //--------------------------------------------------------- @@ -2411,6 +2432,17 @@ - (void)buttonLoadPresetLensProfileIsImporting:(BOOL)isImporting { //--------------------------------------------------------- NSString *gyroflowProjectData = nil; [paramGetAPI getStringParameterValue:&gyroflowProjectData fromParameter:kCB_GyroflowProjectData]; + + //--------------------------------------------------------- + // If the Gyroflow Project is base64 encoded, try to + // decode it first: + //--------------------------------------------------------- + NSData *base64EncodedData = [[NSData alloc] initWithBase64EncodedString:gyroflowProjectData options:0]; + if (base64EncodedData != nil) { + NSString *decodedGyroflowData = [[NSString alloc] initWithData:base64EncodedData encoding:NSUTF8StringEncoding]; + gyroflowProjectData = [NSString stringWithString:decodedGyroflowData]; + } + //NSLog(@"[Gyroflow Toolbox Renderer] gyroflowProjectData: %@", gyroflowProjectData); if (gyroflowProjectData == nil) { @@ -2565,9 +2597,11 @@ - (void)buttonLoadPresetLensProfileIsImporting:(BOOL)isImporting { } //--------------------------------------------------------- - // Save the data to FxPlug: + // Save the data to FxPlug as base64 encoded data: //--------------------------------------------------------- - [paramSetAPI setStringParameterValue:loadResultString toParameter:kCB_GyroflowProjectData]; + NSData *loadResultStringData = [loadResultString dataUsingEncoding:NSUTF8StringEncoding]; + NSString *base64EncodedString = [loadResultStringData base64EncodedStringWithOptions:0]; + [paramSetAPI setStringParameterValue:base64EncodedString toParameter:kCB_GyroflowProjectData]; //--------------------------------------------------------- // Trash the cache! @@ -3271,7 +3305,9 @@ - (void)buttonReloadGyroflowProject { //--------------------------------------------------------- // Update 'Gyroflow Project Data': //--------------------------------------------------------- - [paramSetAPI setStringParameterValue:selectedGyroflowProjectData toParameter:kCB_GyroflowProjectData]; + NSData *loadResultStringData = [selectedGyroflowProjectData dataUsingEncoding:NSUTF8StringEncoding]; + NSString *base64EncodedString = [loadResultStringData base64EncodedStringWithOptions:0]; + [paramSetAPI setStringParameterValue:base64EncodedString toParameter:kCB_GyroflowProjectData]; //--------------------------------------------------------- // Update 'Loaded Gyroflow Project' Text Box: @@ -3385,7 +3421,9 @@ - (void)buttonReloadGyroflowProject { //--------------------------------------------------------- // Update 'Gyroflow Project Data': //--------------------------------------------------------- - [paramSetAPI setStringParameterValue:selectedGyroflowProjectData toParameter:kCB_GyroflowProjectData]; + NSData *loadResultStringData = [selectedGyroflowProjectData dataUsingEncoding:NSUTF8StringEncoding]; + NSString *base64EncodedString = [loadResultStringData base64EncodedStringWithOptions:0]; + [paramSetAPI setStringParameterValue:base64EncodedString toParameter:kCB_GyroflowProjectData]; //--------------------------------------------------------- // Generate a new unique identifier: @@ -4125,7 +4163,9 @@ - (BOOL)importMediaWithOptionalURL:(NSURL*)optionalURL { //--------------------------------------------------------- // Update 'Gyroflow Project Data': //--------------------------------------------------------- - [paramSetAPI setStringParameterValue:gyroflowProject toParameter:kCB_GyroflowProjectData]; + NSData *gyroflowProjectData = [gyroflowProject dataUsingEncoding:NSUTF8StringEncoding]; + NSString *base64EncodedString = [gyroflowProjectData base64EncodedStringWithOptions:0]; + [paramSetAPI setStringParameterValue:base64EncodedString toParameter:kCB_GyroflowProjectData]; //--------------------------------------------------------- // Update 'Loaded Gyroflow Project' Text Box: @@ -4442,7 +4482,9 @@ - (void)importGyroflowProjectWithOptionalURL:(NSURL*)optionalURL { //--------------------------------------------------------- // Update 'Gyroflow Project Data': //--------------------------------------------------------- - [paramSetAPI setStringParameterValue:selectedGyroflowProjectData toParameter:kCB_GyroflowProjectData]; + NSData *gyroflowProjectData = [selectedGyroflowProjectData dataUsingEncoding:NSUTF8StringEncoding]; + NSString *base64EncodedString = [gyroflowProjectData base64EncodedStringWithOptions:0]; + [paramSetAPI setStringParameterValue:base64EncodedString toParameter:kCB_GyroflowProjectData]; //--------------------------------------------------------- // Update 'Loaded Gyroflow Project' Text Box: