Przeglądaj źródła

mac-virtualcam: Handle missing DAL plugin destination directory

PatTheMav 4 lat temu
rodzic
commit
516ed4458d
1 zmienionych plików z 28 dodań i 15 usunięć
  1. 28 15
      plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm

+ 28 - 15
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;