From 5da86637e569033acde0470eab1721440683829e Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Tue, 7 May 2019 08:13:41 +0200 Subject: [PATCH] Stubbed API for Autotype plugins that resolve window titles --- MacPass/MPPlugin.h | 7 +++++++ MacPass/MPPluginHost.h | 7 +++++++ MacPass/MPPluginHost.m | 27 +++++++++++++++++++++++---- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/MacPass/MPPlugin.h b/MacPass/MPPlugin.h index 90584901..abb76b48 100644 --- a/MacPass/MPPlugin.h +++ b/MacPass/MPPlugin.h @@ -118,6 +118,13 @@ FOUNDATION_EXPORT NSString *const MPPluginUnkownVersion; - (KPKTree *)treeForRunningOpenPanel:(NSOpenPanel *)panel withResponse:(NSModalResponse)response; @end +@protocol MPAutotypeWindowTitleResolverPlugin +@required + +- (BOOL)acceptsRunningApplication:(NSRunningApplication *)runningApplication; +- (NSString *)windowTitleForRunningApplication:(NSRunningApplication *)runningApplication; +@end + @interface MPPlugin (Deprecated) - (instancetype)initWithPluginManager:(id)manager; diff --git a/MacPass/MPPluginHost.h b/MacPass/MPPluginHost.h index 80127091..94e10180 100644 --- a/MacPass/MPPluginHost.h +++ b/MacPass/MPPluginHost.h @@ -32,6 +32,7 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey; @class MPPlugin; @class KPKEntry; @protocol MPImportPlugin; +@protocol MPAutotypeWindowTitleResolverPlugin; @interface MPPluginHost : NSObject @@ -57,3 +58,9 @@ FOUNDATION_EXPORT NSString *const MPPluginHostPluginBundleIdentifiyerKey; @property (readonly, copy) NSArray __kindof*> *importPlugins; @end + +@interface MPPluginHost (MPWindowTitleResolverSupport) + +- (NSArray __kindof*> *)windowTitleResolverForRunningApplication:(NSRunningApplication *)runningApplication; + +@end diff --git a/MacPass/MPPluginHost.m b/MacPass/MPPluginHost.m index 0558d84b..e8cbcf4f 100644 --- a/MacPass/MPPluginHost.m +++ b/MacPass/MPPluginHost.m @@ -447,6 +447,13 @@ NSString *const MPPluginHostPluginBundleIdentifiyerKey = @"MPPluginHostPluginBun [context.plugin performActionForMenuItem:item withEntries:context.entries]; } +- (NSArray *)_pluginsConformingToProtocoll:(Protocol *)protocol { + NSPredicate *filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { + return ([evaluatedObject conformsToProtocol:protocol]); + }]; + return [self.mutablePlugins filteredArrayUsingPredicate:filterPredicate]; +} + @end NSString *const MPPluginBundleIdentifierKey = @"MPPluginBundleIdentifierKey"; @@ -455,10 +462,22 @@ NSString *const MPImportPluginUTIKey = @"MPImportPluginUTIKey"; @implementation MPPluginHost (MPImportPluginSupport) - (NSArray *)importPlugins { - NSPredicate *filterPredicate = [NSPredicate predicateWithBlock:^BOOL(id _Nullable evaluatedObject, NSDictionary * _Nullable bindings) { - return ([evaluatedObject conformsToProtocol:@protocol(MPImportPlugin)]); - }]; - return [self.mutablePlugins filteredArrayUsingPredicate:filterPredicate]; + return [self _pluginsConformingToProtocoll:@protocol(MPImportPlugin)]; } @end +@implementation MPPluginHost (MPWindowTitleResolverSupport) + +- (NSArray *)windowTitleResolverForRunningApplication:(NSRunningApplication *)runningApplication { + NSArray *> *plugins = [self _pluginsConformingToProtocoll:@protocol(MPAutotypeWindowTitleResolverPlugin)]; + NSMutableArray *resolver = [[NSMutableArray alloc] init]; + for(MPPlugin *plugin in plugins) { + if([plugin acceptsRunningApplication:runningApplication]) { + [resolver addObject:plugin]; + } + } + return [resolver copy]; +} + + +@end