mac-virtualcam: Handle missing DAL plugin destination directory

This commit is contained in:
PatTheMav 2021-02-25 15:37:23 +01:00 committed by Jim
parent 7f27963caa
commit 516ed4458d

View File

@ -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;