From 516ed4458dbc74b27b425533789d4e9dd95b923b Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 25 Feb 2021 15:37:23 +0100 Subject: [PATCH] mac-virtualcam: Handle missing DAL plugin destination directory --- .../src/obs-plugin/plugin-main.mm | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm b/plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm index 57ba30e5c..59f097ba1 100644 --- a/plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm +++ b/plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm @@ -27,32 +27,30 @@ static bool check_dal_plugin() NSString *dalPluginDestinationPath = @"/Library/CoreMediaIO/Plug-Ins/DAL/"; - NSString *dalPluginFileName = [dalPluginDestinationPath - stringByAppendingString:@"obs-mac-virtualcam.plugin"]; + NSString *dalPluginFileName = + @"/Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin"; + BOOL dalPluginDirExists = + [fileManager fileExistsAtPath:dalPluginDestinationPath]; BOOL dalPluginInstalled = [fileManager fileExistsAtPath:dalPluginFileName]; BOOL dalPluginUpdateNeeded = NO; if (dalPluginInstalled) { - NSString *dalPluginPlistPath = [dalPluginFileName - stringByAppendingString:@"/Contents/Info.plist"]; NSDictionary *dalPluginInfoPlist = [NSDictionary dictionaryWithContentsOfURL: - [NSURL fileURLWithPath:dalPluginPlistPath] - error:nil]; + [NSURL fileURLWithPath: + @"/Library/CoreMediaIO/Plug-Ins/DAL/obs-mac-virtualcam.plugin/Contents/Info.plist"]]; NSString *dalPluginVersion = [dalPluginInfoPlist valueForKey:@"CFBundleShortVersionString"]; const char *obsVersion = obs_get_version_string(); - if (![dalPluginVersion isEqualToString:@(obsVersion)]) { - dalPluginUpdateNeeded = YES; - } - } else { - dalPluginUpdateNeeded = YES; + dalPluginUpdateNeeded = + ![dalPluginVersion isEqualToString:@(obsVersion)]; } - if (dalPluginUpdateNeeded) { + if (!dalPluginInstalled || dalPluginUpdateNeeded) { + // TODO: Remove this distinction once OBS is built into an app bundle by cmake by default NSString *dalPluginSourcePath; NSRunningApplication *app = [NSRunningApplication currentApplication]; @@ -74,12 +72,27 @@ static bool check_dal_plugin() withString:@""]; } + NSString *createPluginDirCmd = + (!dalPluginDirExists) + ? [NSString stringWithFormat: + @"mkdir -p '%@' && ", + dalPluginDestinationPath] + : @""; + NSString *deleteOldPluginCmd = + (dalPluginUpdateNeeded) + ? [NSString stringWithFormat:@"rm -rf '%@' && ", + dalPluginFileName] + : @""; + NSString *copyPluginCmd = + [NSString stringWithFormat:@"cp -R '%@' '%@'", + dalPluginSourcePath, + dalPluginDestinationPath]; if ([fileManager fileExistsAtPath:dalPluginSourcePath]) { NSString *copyCmd = [NSString stringWithFormat: - @"do shell script \"rm -rf '%@' && cp -R '%@' '%@'\" with administrator privileges", - dalPluginFileName, dalPluginSourcePath, - dalPluginDestinationPath]; + @"do shell script \"%@%@%@\" with administrator privileges", + createPluginDirCmd, deleteOldPluginCmd, + copyPluginCmd]; NSDictionary *errorDict; NSAppleEventDescriptor *returnDescriptor = NULL;